如何捕获对我的 ASP.NET 应用程序的所有错误 (url) 请求?

如何捕获对我的 ASP.NET 应用程序的所有错误 (url) 请求?

我有一个 ASP.NET 网站,为了捕获错误的 URL 请求并将其重定向到主页,我输入了:

<customErrors defaultRedirect="/" mode="On">
        <error statusCode="404" redirect="~/"/>
    </customErrors>

在我的 web.config 中

这仅适用于类似的页面http://mywebsite/wrong.aspx,但不适用于文件夹(例如http://mywebsite/wrong-folder/:)

我知道我必须捕获所有请求才能解决这个问题,但是我无法访问 IIS 来使用 ISAPI 进行该设置...

这可以在 web.config 中完成吗?您有示例吗?

答案1

<customErrors>...</customErrors>标签仅控制 ASP.NET 在发生错误时将执行的操作。如果您访问不存在的目录,则错误将由 IIS 而不是 ASP.NET 处理。

因此,您必须更改 IIS 的 404 处理方式。这只能通过文件来完成,applicationHost.config但通常只有管理员权限才能访问。以下是该文件的摘录,它将 404 处理方式更改为特定网站的自定义页面:

<location path="[Your Site Name]">
    <system.webServer>
        <httpErrors errorMode="DetailedLocalOnly">
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/your-404-handler.aspx" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</location>

您也可以通过 IIS 管理器更改此设置,方法如下:Sites -> [Your Site Name] -> Error Pages -> 404

答案2

这可以通过使用微软 URL 重写。如果已安装模块,请将以下规则添加到您的 web.config。任何不匹配“MyPage.aspx”(不区分大小写)的请求都将通过发出 HTTP 301 来响应,其中 MyPage.aspx 为新位置。您需要在“条件”下将所有可接受的 URL 列入白名单,尽管这是使用自定义错误的替代方法。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="RedirectToMyPage" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^MyPage.aspx$" negate="true" />
          </conditions>
          <action type="Redirect" url="MyPage.aspx" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

另一种选择是利用 URL 重写和 customErrors,通过配置 customErrors 将 404 错误重定向到诸如“/404Error.aspx”之类的页面(该页面不需要存在),然后制定一个 URL 重写规则,将所有对“/404Error.aspx”的请求重定向到您的主页。此 URL 重写规则如下所示:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="RedirectToMyPage" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^404Error.aspx$" />
          </conditions>
          <action type="Redirect" url="MyPage.aspx" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

相关内容