我使用 .NET Core 8.0、Newtonsoft json 和 NSwag 来生成 Web API 服务器。我们有一个用于错误的自定义 json 错误正文响应。
当我们生成错误时,效果很好。
但是,如果 json 正文请求中有语法错误,框架(我不确定是哪一位)会自动生成 400 响应,其中包含错误消息,其格式与我们在 OpenAPI 规范中指定的格式不同。
我已经尝试过
ExceptionMiddleware
。我本来希望捕获该处理程序中的异常,但我看到的只是 HttpContext
中的错误响应,已构建并准备好回复。
有什么想法吗?有没有地方可以添加我自己的处理程序?
自动生成 400 响应,其中包含错误消息,其格式与我们在 OpenAPI 规范中指定的格式不同
ProblemDetails
回复。正如链接文章所解释的,这是一种互联网标准格式,用于表示由于无效请求而导致的错误响应。
默认情况下,任何用
ApiControllerAttribute
修饰的控制器都会自动选择进行 ProblemDetails
处理。有很多方法可以控制和自定义此处理,所有内容都在该文章中介绍,但如果您只想完全禁用它,则 Program.cs
中的以下内容应该可以解决问题:
builder.Services.AddControllers()
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressMapClientErrors = true;
});
我强烈建议您花时间阅读该文章并了解如何利用此功能自动返回您自己一致的错误响应,而不是在每个控制器端点中手动生成这些响应。
如果您的项目是 Web Api 并且使用
[ApiController]
属性声明控制器,请务必在 SuppressModelStateInvalidFilter
文件中设置 Program.cs
true以禁用自动模型验证:
builder.Services.AddControllers().ConfigureApiBehaviorOptions(options =>
{
options.SuppressModelStateInvalidFilter = true; // Disable automatic model validation
});