.net - 以 JSON 消息的形式返回异常

标签 .net asp.net-core asp.net-core-mvc

我正在使用 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/

相关文章:

c# - 设计以避免派生类中的类型转换?

c# - Wpf WebBrowser 加载 javascript

asp.net-core - 无法升级或降级 NuGet 包

c# - 从已发送的电子邮件网络核心身份调用时,重置密码不起作用

c# - 如何生成从 Controller 到 razorpages 的链接?

.net - ILMerge 在合并时挂起

powershell - (400) 尝试向 API 发布简单值时出现错误请求

c# - 在 asp.net 核心项目中获取 Azure Active Directory 组

c# - 什么时候可以使用 `IWebHost.Start()` 方法?

c# - 为什么在 C# 中启用多行的 TextBox 控件上禁用 CTRL+A 快捷方式?