无法在Application_Error中捕获403错误

时间:2012-09-02 14:56:38

标签: asp.net iis

我在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方法时获取原始请求数据?

1 个答案:

答案 0 :(得分:1)

runAllManagedModulesForAllRequests下的true下的web.config中将modules设置为system.webServer

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>