StaticFile 处理程序的自定义错误页面

Veg*_*sen 5 asp.net iis web-config

我正在尝试使自定义错误页面适用于任何未以其他方式处理或不是磁盘上有效文件的 URL。

我现在有以下设置:

<system.web>
  <customErrors mode="On" defaultRedirect="~/Error">
    <error statusCode="404" redirect="~/Error/Error404" />
    <error statusCode="500" redirect="~/Error" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="Detailed" defaultResponseMode="ExecuteURL">
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error responseMode="ExecuteURL" statusCode="404" path="/Error/Error404" />
    <error responseMode="ExecuteURL" statusCode="500" path="/Error" />
  </httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

这将正确重定向以下 URL:

  • /test
  • /test/foo/bar

但是,任何包含句点的内容都会给出以下消息:

  • 模块 IIS Web 核心
  • 通知 MapRequestHandler
  • 处理 程序静态文件
  • 错误代码 0x80070002
  • 请求的网址 https://localhost/test.txt
  • 物理路径 C:\foo\test.txt
  • 匿名登录方法
  • 登录用户 匿名

我需要这些 URL 也重定向到我的自定义错误页面。

mis*_*dan 0

尝试使用

<httpErrors errorMode="Custom" .. />
Run Code Online (Sandbox Code Playgroud)

不过,要小心。我发现有时会遇到循环条件,或者 IIS 错误页面将在我的自定义错误模块之前执行。IIS 和 ASP.NET 应用程序之间的接口并不总是很好。我似乎仍然找不到在 ASP.NET 中捕获静态文件 404 的方法,但会转向静态文件处理程序。