【发布时间】:2018-12-11 05:12:27
【问题描述】:
我只想从我的 Web API (Asp.net Core 2.1) 返回标准化的错误响应,但我似乎不知道如何处理模型绑定错误。
该项目刚刚从“ASP.NET Core Web 应用程序”>“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)。
如何挂钩模型绑定,以便为项目中的所有操作提供标准化的错误响应?
我读过很多文章,但似乎都在讨论全局异常处理或验证错误。
【问题讨论】:
标签: c# asp.net-core asp.net-core-webapi asp.net-core-middleware