【问题标题】:Unable to catch 403 error in Application_Error无法在 Application_Error 中捕获 403 错误
【发布时间】:2012-09-02 14:56:37
【问题描述】:

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

【问题讨论】:

    标签: asp.net iis


    【解决方案1】:

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

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

    【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2015-04-30
    • 1970-01-01
    • 2019-02-26
    • 2021-04-02
    • 1970-01-01
    • 2011-06-21
    • 2011-02-23
    相关资源
    最近更新 更多