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

时间:2016-02-21 17:24:11

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

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

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

1 个答案:

答案 0 :(得分:8)

使用Response.StatusCode setter和getter可以实现这一点。

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

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

对于跨控制器行为:您应该按照以下步骤进行操作。

  1. 创建一个抽象的BaseController
  2. 让您当前的控制器继承自BaseController。
  3. 在BaseController中添加以下逻辑。
  4. <强> 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);
        }
    }
    

    注意:
    您还可以将异常添加为已处理并将其重定向到其他控制器/操作

    filterContext.ExceptionHandled = true;
    filterContext.Result = this.RedirectToAction("Index", "Error");
    
    关于ASP.NET MVC的

    更多信息可以找到错误处理HERE