与documented一样,ProblemDetails
(基于RFC 7807规范)是ASP.NET Core 2.2中客户端错误代码的标准响应。当我在API控制器操作方法中返回诸如NotFound()
之类的内容时,此方法就可以正常工作。
但是,如何将我的Web API项目配置为也将ProblemDetails
用于未处理的异常(“ 500 Internal Server Error”响应)?默认情况下,此类未处理的异常要么返回HTML正文(调用UseDeveloperExceptionPage()
或UseExceptionHandler(somePath)
时),要么不返回正文(如果未调用任何方法)。
当API控制器中发生异常时,我的首选解决方案始终会返回一个ProblemDetails
对象,但是对于其他(与视图相关)控制器上的异常,我仍然会返回HTML页面。在开发模式下,ProblemDetails
对象应具有完整的异常详细信息,而在生产中仅具有非常有限的详细信息。这可能吗?
答案 0 :(得分:1)
似乎ProblemDetails
不支持404
和500
异常。一种解决方法是安装Hellang.Middleware.ProblemDetails
软件包`,
Install-Package Hellang.Middleware.ProblemDetails
然后在startup.cs中进行配置,仅在开发环境下将IncludeExceptionDetails
设置为ture
。
public class Startup
{
public Startup(IConfiguration configuration, IHostingEnvironment env)
{
Configuration = configuration;
CurrentEnvironment = env;
}
public IConfiguration Configuration { get; }
public IHostingEnvironment CurrentEnvironment { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddProblemDetails(setup=> {
setup.IncludeExceptionDetails = _ => CurrentEnvironment.IsDevelopment();
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
public void Configure(IApplicationBuilder app)
{
app.UseProblemDetails();
//...
}
}
请参阅here。