我在IIS 7.5中托管了asp.net mvc 4站点。我正在Application_Error处理程序中手动处理所有http错误。一切都很好,除了403错误(例如导航到http://mysite/App_Data
时)。问题是Application_Error没有捕获此错误。有人能告诉我如何让它运作?
修改
我发现Application_Error只捕获托管模块中抛出的异常。由于403L错误(在我的情况下是403.14)由未受管的DirectoryListingModule抛出,因此Application_Error无法捕获此错误。此外,RequestFilteringModule(也是非托管)处理的错误可能是404.7或404.8。我发现自定义处理这些错误的唯一方法是使用以下设置:
<httpErrors errorMode="Custom" existingResponse="Replace">
<error path="/Error/Forbidden" statusCode="403" subStatusCode="14" responseMode="ExecuteURL"/>
<error path="/Error/NotFound" statusCode="404" subStatusCode="7" responseMode="ExecuteURL"/>
<error path="/Error/NotFound" statusCode="404" subStatusCode="8" responseMode="ExecuteURL"/>
</httpErrors>
让ErrorController使用NotFound操作。但是这种方法对我来说有一个缺点 - 导致错误的原始请求数据丢失(因为执行了子服务器端重定向)并且我无法获取它(至少我不知道如何) 。 所以,现在我想改变我的问题:这是处理此类错误的唯一方法吗?有没有办法在使用httpErrors方法时获取原始请求数据?
答案 0 :(得分:1)
在runAllManagedModulesForAllRequests
下的true
下的web.config中将modules
设置为system.webServer
。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
...
</system.webServer>