Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在引发HttpException以与httpErrors一起使用时设置子状态代码_Asp.net_Asp.net Mvc_Exception_Iis_Iis 7 - Fatal编程技术网

Asp.net 在引发HttpException以与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

我正在web.config中使用httpErrors,并具有以下特性:

<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();
    }
}