我的业务层中有几个自定义异常,在我的ASP.NET应用程序中冒泡到我的API方法。
目前,它们都转换为Http状态500.如何映射这些自定义异常以便我可以返回不同的Http状态代码?
答案 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;
对于跨控制器行为:您应该按照以下步骤进行操作。
<强> 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