using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; namespace AsbCloudWebApi.Controllers { /// <summary> /// Имитирует разные типы ответа сервера /// </summary> [Route("api/[controller]")] [ApiController] public class MockController : ControllerBase { /// <summary> /// имитирует http-400 /// </summary> [HttpGet("400")] [ProducesResponseType(typeof(ValidationProblemDetails), (int)System.Net.HttpStatusCode.BadRequest)] public IActionResult Get400([FromQuery, Required]IDictionary<string, string> args) { var errors = new Dictionary<string, string[]>(); foreach (var arg in args) { var countOfErrors = ((arg.Key + arg.Value).Length % 3) + 1; var errorsText = Enumerable.Range(0, countOfErrors) .Select(i => $"{arg.Value} не соответствует критериям проверки № {i}"); errors.Add(arg.Key, errorsText.ToArray()); } if (errors.Any()) { var problem = new ValidationProblemDetails(errors); return BadRequest(problem); } else { var problem = new ValidationProblemDetails { Detail = "at least one argument must be provided" }; return BadRequest(problem); } } /// <summary> /// имитирует http-403 /// </summary> [HttpGet("403")] public IActionResult Get403() { return Forbid(); } /// <summary> /// имитирует http-401 /// </summary> [HttpGet("401")] public IActionResult Get401() { return Unauthorized(); } /// <summary> /// имитирует http-500 /// </summary> [HttpGet("500")] public IActionResult Get500() { throw new System.Exception("Это тестовое исключение"); } } }