Я хотел бы возвращать только стандартизированные ответы об ошибках из моего Web API (Asp.net Core 2.1), но я не могу понять, как обрабатывать ошибки привязки модели.
Проект только что создан из шаблона «Базовое веб-приложение ASP.NET»> «API». У меня есть простое действие, определенное как:
[Route("[controller]")]
[ApiController]
public class MyTestController : ControllerBase
{
[HttpGet("{id}")]
public ActionResult<TestModel> Get(Guid id)
{
return new TestModel() { Greeting = "Hello World!" };
}
}
public class TestModel
{
public string Greeting { get; set; }
}
Если я сделаю запрос на это действие с недействительным Guid (например, https://localhost:44303/MyTest/asdf
), я получу следующий ответ:
{
"id": [
"The value 'asdf' is not valid."
]
}
У меня есть следующий код в Startup.Configure
:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
JsonErrorMiddleware.CreateSingleton(env);
if (!env.IsDevelopment())
{
app.UseHsts();
}
app
.UseHttpsRedirection()
.UseStatusCodePages(async ctx => { await JsonErrorMiddleware.Instance.Invoke(ctx.HttpContext); })
.UseExceptionHandler(new ExceptionHandlerOptions() { ExceptionHandler = JsonErrorMiddleware.Instance.Invoke })
.UseMvc()
}
JsonErrorMiddleware
- это просто класс, который преобразует ошибки в правильную форму, которую я хочу вернуть, и помещает их в ответ. Он не вызывается вообще для ошибок привязки модели (не выдается Exception
и UseStatusCodePages
не вызывается).
Как подключиться к привязке модели, чтобы обеспечить стандартизированный ответ об ошибке для всех действий в моем проекте?
Я прочитал кучу статей, но все они, похоже, либо обсуждают глобальную обработку исключений, либо ошибки проверки.