我正在创建可能会引发异常的.net核心Web API,在这种情况下,它无法通过ID查找人。如果找不到该人,则抛出自定义异常,例如NotFoundException。
是否有一个公共/全局位置,我可以拦截此异常,然后返回404状态代码。而不是在每个控制器中编写自定义代码来处理所有不同的可能异常。我在想也许只是ExceptionHelper类,但想知道是否有更好的方法。理想情况下,我想在一个地方处理所有异常并根据异常返回不同的状态代码?
你可以用你的Configure
方法来解决这个问题Startup.cs
。类似于以下内容:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseExceptionHandler(appBuilder =>
{
appBuilder.Run(async context =>
{
var exceptionHandlerFeature = context.Features.Get<IExceptionHandlerFeature>();
if (exceptionHandlerFeature != null)
{
var exception = exceptionHandlerFeature.Error;
if(exception == YourNotFoundException)
{
context.Response.StatusCode = 404;
await context.Response.WriteAsync("Could not find resource");
}
//you can also have global logging here eg:
//var logger = loggerFactory.CreateLogger("Global exception logger");
//logger.LogError(500, exception, exception.Message);
}
else
{
context.Response.StatusCode = 500;
await context.Response.WriteAsync("an unexpected fault happened. Try again later.");
}
});
});
...
}
然后在控制器中引发异常
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句