Asp.net <;自定义错误/>;更改状态代码

Asp.net <;自定义错误/>;更改状态代码,asp.net,asp.net-mvc,custom-error-pages,custom-errors,Asp.net,Asp.net Mvc,Custom Error Pages,Custom Errors,我正在我的Asp.net MVC应用程序上实现,到目前为止还不错 我可以通过在MVC中抛出HttpException异常来测试它,然后返回正确的aspx页面 但是,我有一个BusinessException类,它有一个HttpStatusCode属性,可以从应用程序中抛出 我需要捕获这种类型的异常,并将响应状态代码覆盖到特定的HttpStatusCode属性,以便返回正确的aspx页面 现在,即使我覆盖Response.StatusCode属性,我总是会得到500.aspx页面 有没有办法在“c

我正在我的
Asp.net MVC
应用程序上实现
,到目前为止还不错

我可以通过在MVC中抛出
HttpException
异常来测试它,然后返回正确的
aspx
页面

但是,我有一个
BusinessException
类,它有一个
HttpStatusCode
属性,可以从应用程序中抛出

我需要捕获这种类型的异常,并将响应状态代码覆盖到特定的HttpStatusCode属性,以便返回正确的aspx页面

现在,即使我覆盖Response.StatusCode属性,我总是会得到
500.aspx
页面

有没有办法在“customErrors”生效之前设置状态代码

public ActionResult ThrowBusinessException()
{
    // this throws a Business Exception with NotFound status code. Should return 404.aspx, but it returns 500.aspx
    throw new BusinessException("Product with ID = {0} was not found", HttpStatusCode.NotFound);
}

public class ErrorHandlerActionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext filterContext)
    {
        Exception ex = filterContext.Exception;

        if(ex.GetType() == typeof(BusinessException))
        {
            BusinessException businessException = (BusinessException)ex;
            filterContext.HttpContext.Response.StatusCode = (int)businessException.HttpStatusCode;
        }
    }
}

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/errors/500.aspx">
  <error statusCode="404" redirect="~/errors/404.aspx" />
  <error statusCode="403" redirect="~/errors/403.aspx" />
  <error statusCode="500" redirect="~/errors/500.aspx" />
</customErrors>
PublicActionResult ThrowBusinessException()
{
//这会引发一个状态代码为NotFound的业务异常。应返回404.aspx,但返回500.aspx
抛出新的BusinessException(“未找到ID为{0}的产品”,HttpStatusCode.NotFound);
}
公共类ErrorHandlerActionFilter:IEExceptionFilter
{
公共无效OneException(例外上下文筛选器上下文)
{
Exception ex=filterContext.Exception;
if(例如GetType()==typeof(BusinessException))
{
BusinessException BusinessException=(BusinessException)ex;
filterContext.HttpContext.Response.StatusCode=(int)businessException.HttpStatusCode;
}
}
}

看一看。谢谢,但我认为这没有帮助,我需要“钩住”customErrors工作流,它由MVC处理