Asp.net 在引发HttpException以与httpErrors一起使用时设置子状态代码
我正在web.config中使用httpErrors,并具有以下特性:Asp.net 在引发HttpException以与httpErrors一起使用时设置子状态代码,asp.net,asp.net-mvc,exception,iis,iis-7,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" /> 但是决定404重定向是否必要的代码在堆栈中的位置更靠后,因此我宁愿抛出异常并停止进一步的执行,而不是返回actionresult 对于没有子状态代码的httpErrors中的错误条目,我可以抛出相应的H
<error statusCode="404" subStatusCode="1" responseMode="Redirect" path="http://www.somewhere-else.com" />
但是决定404重定向是否必要的代码在堆栈中的位置更靠后,因此我宁愿抛出异常并停止进一步的执行,而不是返回actionresult
对于没有子状态代码的httpErrors中的错误条目,我可以抛出相应的HttpException,它可以按预期工作:
throw new HttpException(400, "Bad Request");
但我需要子状态代码。在抛出HttpException之前,我尝试设置Response.SubStatusCode,但它被忽略,并显示默认的404错误页面
有办法吗
(顺便说一句,我知道subStatusCode只是内部代码,不向客户端公开)我意识到这个问题有点老了,我想我会发布一个我遇到的答案,这个答案似乎对我来说足够有效。使用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();
}
}
有点老土,但它适合我的需要
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();
}
}