1

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

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

在自定义操作结果中执行以下操作,效果很好:

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

但是确定是否需要 404 重定向的代码位于堆栈的下方,因此与其返回操作结果,我更愿意抛出异常并停止进一步的执行。

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

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

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

有什么办法吗?

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

4

1 回答 1

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,但它适合我的需求..

于 2015-04-07T14:50:45.730 回答