美文网首页面向对象实践
AspNetCore 2.2 新特性 -- ProblemDet

AspNetCore 2.2 新特性 -- ProblemDet

作者: 灭蒙鸟 | 来源:发表于2019-03-11 20:49 被阅读2次

在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.1问题详细信息支持

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();

相关文章

网友评论

    本文标题:AspNetCore 2.2 新特性 -- ProblemDet

    本文链接:https://www.haomeiwen.com/subject/dsyepqtx.html