我在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只是内部的,不会暴露给客户端)
答案 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,但它符合我的需要..