如何从exception中获取IIS子状态代码?

我正在使用HttpModule以这样的方式处理exception:

 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状态代码 (例如:302,404,503等),一切都很好。 但是,对于IIS状态代码 (例如: GetHttpCode等), 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,看看是否在位级上发生了一些事情,你可以从中找出代码和子代码。

不知道这是否有帮助。

你不想要内部exception。 你要:

 HttpException httpEx = httpApp.Server.GetLastError() as HttpException; if (httpEx != null) errorcode = httpEx == null ? 0 : httpex.GetHttpCode();