首页 > 解决方案 > 显示危险请求的友好错误页面

问题描述

我的 ASP .Net 网站的 web.config 配置为

  <system.web>
   .....
    <customErrors mode="RemoteOnly">
      <error statusCode="500" redirect="/500/" />
    </customErrors>

  <system.webServer>
    ....
    <httpErrors>
      <remove statusCode="400" subStatusCode="-1" />
      <remove statusCode="401" subStatusCode="-1" />
      <remove statusCode="403" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <error statusCode="400" path="/404/" responseMode="Redirect" />
      <error statusCode="401" path="/404/" responseMode="Redirect" />
      <error statusCode="403" path="/404/" responseMode="ExecuteURL" />
      <error statusCode="404" path="/404/" responseMode="ExecuteURL" />
      <error statusCode="500" path="/500/" responseMode="ExecuteURL" />
    </httpErrors>

我测试了一个 404 页面并显示了我的友好错误页面,但是当我将 < 添加到我认为返回 400 响应的 URL 时,我只得到 YSOD(黄屏死机)而不是预期的友好页面?

我错过了什么?

标签: asp.netiis-8

解决方案


添加'<' 到 URL 会导致 Dotnet 代码错误,可以通过自定义错误功能捕获。

<customErrors mode="On" defaultRedirect="/MyError1.html" redirectMode="ResponseRedirect">
    <error statusCode="400" redirect="/MyError400.html" />
    <!--<error statusCode="401" redirect="/MyError2.html" />
    <error statusCode="403" redirect="/MyError2.html" />
    <error statusCode="404" redirect="/MyError2.html" />
    <error statusCode="500" redirect="/MyError2.html" />-->
  </customErrors>

就我而言,我通常将该custom error功能与http error处理错误的功能结合起来,因为 IIS 和 DotNet 代码都可能引发异常。它还可以避免YSOD.

<customErrors mode="On" defaultRedirect="/MyError1.html" redirectMode="ResponseRedirect">
    <error statusCode="400" redirect="/MyError400.html" />
    <!--<error statusCode="401" redirect="/MyError2.html" />
    <error statusCode="403" redirect="/MyError2.html" />
    <error statusCode="404" redirect="/MyError2.html" />
    <error statusCode="500" redirect="/MyError2.html" />-->
  </customErrors>
  </system.web>
  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Auto">
      <remove statusCode="400" />
      <remove statusCode="401" />
      <remove statusCode="403" />
      <remove statusCode="404" />
      <remove statusCode="500" />
      <error statusCode="400" path="MyError.html" responseMode="File" />
      <error statusCode="401" path="MyError.html" responseMode="File" />
      <error statusCode="403" path="MyError.html" responseMode="File" />
      <error statusCode="404" path="MyError.html" responseMode="File" />
      <error statusCode="500" path="MyError.html" responseMode="File" />
    </httpErrors>
  </system.webServer>

结果。 更多细节。customErrors 和 httpErrors 有什么区别? 如果有什么我可以帮忙的,请随时告诉我。
在此处输入图像描述



推荐阅读