ASP.NET API 中的 Http 状态代码自定义异常
Custom exceptions to Http status codes in ASP.NET API
我的业务层中有几个自定义异常冒泡到我的 ASP.NET 应用程序中的 API 方法。
目前,它们都转换为 Http 状态 500。如何映射这些自定义异常以便我可以 return 不同的 Http 状态代码?
这可以使用 Response.StatusCode setter 和 getter。
本地异常处理:对于本地操作异常处理,将以下内容放入调用代码中。
var responseCode = Response.StatusCode;
try
{
// Exception was called
}
catch (BusinessLayerException1)
{
responseCode = 201
}
catch (BusinessLayerException2)
{
responseCode = 202
}
Response.StatusCode = responseCode;
对于交叉控制器行为:您应该遵循以下步骤。
- 创建一个抽象的BaseController
- 使您当前的控制器继承自 BaseController。
- 在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
我的业务层中有几个自定义异常冒泡到我的 ASP.NET 应用程序中的 API 方法。
目前,它们都转换为 Http 状态 500。如何映射这些自定义异常以便我可以 return 不同的 Http 状态代码?
这可以使用 Response.StatusCode setter 和 getter。
本地异常处理:对于本地操作异常处理,将以下内容放入调用代码中。
var responseCode = Response.StatusCode;
try
{
// Exception was called
}
catch (BusinessLayerException1)
{
responseCode = 201
}
catch (BusinessLayerException2)
{
responseCode = 202
}
Response.StatusCode = responseCode;
对于交叉控制器行为:您应该遵循以下步骤。
- 创建一个抽象的BaseController
- 使您当前的控制器继承自 BaseController。
- 在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