c# - ASP.NET API 中 Http 状态代码的自定义异常

标签 c# asp.net-web-api http-status-codes custom-exceptions

我的业务层中有几个自定义异常会冒泡到我的 ASP.NET 应用程序中的 API 方法。

目前,它们都转换为 Http 状态 500。如何映射这些自定义异常以便返回不同的 Http 状态代码?

最佳答案

这可以使用 Response.StatusCode setter 和 setter/getter 。

本地异常处理:对于本地操作异常处理,将以下内容放入调用代码中。

var responseCode = Response.StatusCode;
try
{
    // Exception was called
}
catch (BusinessLayerException1)
{
    responseCode = 201
}
catch (BusinessLayerException2)
{
    responseCode = 202
}
Response.StatusCode = responseCode;

对于跨 Controller 行为:您应该遵循以下过程。

  1. 创建一个抽象的BaseController
  2. 让您当前的 Controller 继承自 BaseController。
  3. 在 BaseController 中添加以下逻辑。

BaseController.cs

public abstract class BaseController : Controller
{
    protected override void OnException(ExceptionContext filterContext)
    {
        var responseCode = Response.StatusCode;
        var exception = filterContext.Exception;
        switch (exception.GetType().ToString())
        {
            case "ArgumentNullException":
                responseCode = 601;
                break;

            case "InvalidCastException":
                responseCode = 602;
                break;
        }
        Response.StatusCode = responseCode;
        base.OnException(filterContext);
    }
}

注意:
您还可以添加已处理的异常并将其重定向到其他一些Controller/Action

filterContext.ExceptionHandled = true;
filterContext.Result = this.RedirectToAction("Index", "Error");
可以找到有关 ASP.NET MVC 错误处理的

更多信息 HERE

关于c# - ASP.NET API 中 Http 状态代码的自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35539341/

相关文章:

Android Https 状态码 -1

c# - VB相当于c#new byte[0]

javascript - 模型未使用 Ember.js 和 WebApiAdapter 序列化

internet-explorer - 为旧浏览器显示替代错误页面时使用什么 HTTP 状态代码?

asp.net-web-api - WebApi2属性路由404

c# - 如何创建一个文件来填充 HttpContext.Current.Request.Files?

java - 状态码和错误码的区别

c# - 为什么我的正则表达式在 ASP.NET 中不起作用

C#,如何编写 RegEx.Replace 来替换 xml 元素的值?

c# - 为 DataContractSerializer 预定义 XML 命名空间