我正在使用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
检索这些,因为它的返回值是整数吗?
答案 0 :(得分:2)
你可能无法做到。请在此处查看倒数第二个回复: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,看看是否在位级上发生了一些事情,你可以从中找出代码和子代码。 / p>
不知道这是否有帮助。
答案 1 :(得分:-2)
您不需要内部异常。你想要:
HttpException httpEx = httpApp.Server.GetLastError() as HttpException;
if (httpEx != null)
errorcode = httpEx == null ? 0 : httpex.GetHttpCode();