2

我在 IIS 7.5 中托管了 asp.net mvc 4 站点。我在 Application_Error 处理程序中手动处理所有 http 错误。一切都很好,除了 403 错误(例如导航到 时http://mysite/App_Data)。问题是 Application_Error 没有捕捉到这个错误。有人能告诉我如何让它工作吗?

编辑

我发现 Application_Error 只捕获托管模块中抛出的异常。由于 403 错误(在我的情况下是 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>

具有带有 NotFound 操作的 ErrorController。但是这种方法对我来说有一个缺点 - 导致错误的原始请求数据丢失(因为执行了子服务器端重定向)并且我无法获得它(至少我不知道如何) . 所以,现在我想改变我的问题:这是处理此类错误的唯一方法吗?使用 httpErrors 方法时有没有办法获取原始请求数据?

4

1 回答 1

0

在web.config 中设置runAllManagedModulesForAllRequests为.truemodulessystem.webServer

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    ...
</system.webServer>
于 2012-10-11T06:15:27.330 回答