在2.1和2.2版本中,ASP.NET Core添加了一个名为“问题详细信息”的功能,它将帮助您标准化API控制器中的错误消息。在2.2中,文件新项目默认为使用“[ApiController]”属性从控制器抛出的错误启用“问题详细信息”。另外,在nuget包Hellang.Middleware.ProblemDetails的帮助下,您可以在API控制器之外的404和500错误中添加这些相同的错误。因此,通过升级到2.2和nuget包,您的API可以将所有错误标准化为已定义的规范(RFC 7807)。:)
以下是关于我能找到的主题的官方发行说明。
ASP.NET Core 2.2发布了有关问题详细信息的说明
从2.0升级到2.2并使用问题详细信息
如果要将现有站点升级到2.2并想要使用问题详细信息,则需要添加以下代码。您还可以执行文件新项目并从启动中复制这些值。在3.0中,他们可能会删除这些兼容性开关。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
然后确保您的控制器使用“ApiController”属性。他们在2.2中添加的另一个很酷的事情是你可以将ApiController移动到一个程序集,所以你不必将它添加到每个控制器。
在ASP.NET Core 2.2或更高版本中,[ApiController]属性可以应用于程序集。以这种方式的注释将Web API行为应用于程序集中的所有控制器。请注意,没有办法选择退出单个控制器。
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
现在,如果您发出导致验证错误的请求,您应该看到如下内容:
通过向文件新项目API模板/ api / values / foo中包含的值控制器发出请求而生成错误。
{
"errors": {
"id": [
"The value 'foo' is not valid."
]
},
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "0HLJIMARUILN4:00000001"
}
对400和500错误使用问题详细信息
现在,如果您尝试发出未触及控制器的404请求,则无法获得问题详细信息。更多信息为什么ASP.NET默认情况下不包括它。404NotFound和500Exception不返回ProblemDetails。要解决此问题,您可以安装此nuget插件Hellang.Middleware.ProblemDetails。以下是安装后如何在Startup.cs中配置它的示例。
public void ConfigureServices(IServiceCollection services)
{
// Hellang.Middleware.ProblemDetails package
services.AddProblemDetails();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseProblemDetails();
网友评论