我正在以如下方式使用 HttpModule
处理异常:
int errorCode = 500;
HttpApplication httpApp = (HttpApplication)sender;
try
{
if (httpApp.Server != null)
{
Exception ex;
for (ex = httpApp.Server.GetLastError(); ex != null; ex = ex.InnerException)
{
try
{
HttpException httpEx = ex as HttpException;
if (httpEx != null)
errorCode = httpEx.GetHttpCode();
// ... retrieve appropriate content based on errorCode
}
catch { }
}
}
对于 HTTP status codes (例如:302、404、503 等)一切正常。但是,对于 IIS status codes (例如:401.5、403.4 等),GetHttpCode
可以检索这些,因为它的返回值是一个整数吗?
最佳答案
你可能做不到。请在此处查看倒数第二个回复:http://www.velocityreviews.com/forums/t73739-sending-status-as-4011.html . HTTP RFC 没有定义子代码 ( http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html )。看起来它可能只是 MS 的东西 - 请参阅第一个链接中的最后回复,然后指向此处:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.substatuscode.aspx .虽然这是设置子状态代码而不是检索它的方法,但对我来说有趣的是它仅受“IIS 7.0 中的集成管道模式和至少 .NET Framework 3.0 版”的支持。
我唯一能想到的另一件事是查看 HttpException 的 ErrorCode 属性中的 HRESULT,看看是否在位级别发生了一些事情,您可以从中找出代码和子代码。
不知道有没有用。
关于c# - 如何从异常中获取 IIS 子状态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/787117/