C# web api、如何处理异常和return 适当的状态码

C# web api, how to handle exceptions and return appropriate status code

我正在创建一个 .net 核心网站 api,它可能会引发异常,在这种情况下,它无法通过 ID 找到一个人。如果找不到这个人,我会抛出一个自定义异常,例如NotFoundException.

有没有common/global地方可以拦截这个异常然后return一个404状态码。 而不是在每个控制器中编写自定义代码来处理所有不同的可能异常。我在想也许只是一个 ExceptionHelper class 也许,但想知道是否有更好的方法。理想情况下,我想在一个地方处理所有异常,并根据异常处理 return 不同的状态代码?

您可以在 Startup.csConfigure 方法中处理此问题。类似于以下内容:

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.");
            }

        });
    });
    ...
}

然后在您的控制器中引发异常