在抛出HttpException以与httpErrors一起使用时设置subStatusCode

时间:2013-07-05 16:40:36

标签: asp.net asp.net-mvc exception iis iis-7

我在web.config中使用httpErrors并具有以下内容:

<error statusCode="404" subStatusCode="1" responseMode="Redirect" path="http://www.somewhere-else.com" />

在自定义操作结果中执行以下操作,工作正常:

Response.StatusCode = 404;
Response.SubStatusCode = 1;

但是确定404重定向是否必要的代码是在堆栈的下方,所以不是返回actionresult,我更愿意抛出异常并停止进一步执行。

对于没有subStatusCode的httpErrors中的错误条目,我可以抛出适当的HttpException并按预期工作:

throw new HttpException(400, "Bad Request");

但我需要subStatusCode。我尝试在抛出HttpException之前设置Response.SubStatusCode但它被忽略并显示默认的404错误页面。

有什么方法吗?

(顺便说一句,我知道subStatusCode只是内部的,不会暴露给客户端)

1 个答案:

答案 0 :(得分:0)

我意识到这个问题有点老了,有点想法我发布了一个我认为对我来说效果不错的答案。使用Asp.Net MVC 5.2,我使用以下内容抛出HttpException

throw new HttpException((int) HttpStatusCode.Unauthorized, "Context required", 12)

然后,在我的global.asax.cs错误处理程序中:

protected void Application_Error()
{
    var exception = Server.GetLastError();
    var httpException = exception as HttpException; 

    if (httpException != null)
    {
        Context.Response.StatusCode = httpException.GetHttpCode();
        Context.Response.SubStatusCode = httpException.ErrorCode;
        Context.Server.ClearError();
    }
}  

有点hackish,但它符合我的需要..