我正在使用ASP.NET Core开发API,我正在努力处理异常处理.
当发生任何异常时,或者在我想要返回具有不同状态代码的自定义错误的任何控制器中时,我想返回JSON格式的异常报告.我在错误响应中不需要HTML.
我不确定我是否应该使用中间件或其他东西.我应该如何在ASP.NET Core API中返回JSON异常?
解决方法
您正在寻找异常过滤器(作为属性或全局过滤器).从
docs:
Exception filters handle unhandled exceptions,including those that occur during controller creation and model binding. They are only called when an exception occurs in the pipeline. They can provide a single location to implement common error handling policies within an app.
如果您希望将任何未处理的异常作为JSON返回,则这是最简单的方法:
public class JsonExceptionFilter : IExceptionFilter { public void OnException(ExceptionContext context) { var result = new ObjectResult(new { code = 500,message = "A server error occurred.",detailedMessage = context.Exception.Message }); result.StatusCode = 500; context.Result = result; } }
您可以自定义响应以添加任意数量的详细信息. ObjectResult将序列化为JSON.
在启动时将过滤器添加为MVC的全局过滤器:
public void ConfigureServices(IServiceCollection services) { services.AddMvc(options => { options.Filters.Add(typeof(JsonExceptionFilter)); }); }