我正在使用 ASP.NET Core 开发 API,但我正在努力处理异常处理。
当发生任何异常时,或者在任何我想要返回具有不同状态代码的自定义错误的 Controller 中,我想要返回 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));
});
}
关于.net - 以 JSON 消息的形式返回异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38664207/