【问题标题】:IIS 10 inserts 404 error message at the beginng of a MVC pageIIS 10 在 MVC 页面的开头插入 404 错误消息
【发布时间】:2020-09-22 07:59:19
【问题描述】:

我们在 .Net 4.7.2 上运行 MVC 5 应用程序,并使用 IIS 10 托管它。调查应用程序冻结两分钟后,我得出的结论是配置的 IIS 404 错误页面和应用程序重定向逻辑反弹互不相让。

删除 IIS 错误页面,它变得更奇怪了:现在我看到我们页面上方的默认 IIS 错误是抛出 404 时:

“1”就在正文的开头,因此我猜它一定是 IIS 插入了错误消息。我已经删除了站点以及 IIS 本身上的错误页面。我也更改了文本

%SystemDrive%\inetpub\custerr\\404.htm

检查它是否仍然被提取,但事实并非如此。不幸的是,在谷歌上搜索这类问题时,我通常只找到关于 404 本身的问题或对错误页面的一般帮助,如 https://docs.microsoft.com/en-us/iis/configuration/system.webserver/httperrors/,但没有一个提到附加消息。

由于我们在应用程序中有自定义错误页面,我不希望显示 IIS 错误。是否有某种我不知道的隐藏 IIS 逻辑可以做到这一点?

编辑解决方案:有人添加了一个新的 IHttpModule,它对响应执行刷新。这通常是一个非常糟糕的主意,请参见此处的示例:https://forums.iis.net/t/993221.aspx?Response+Flush+breaks+IIS+s+Custom+Errors+

我猜是因为 flush 和 httpErrors existingResponse=auto,IIS 没有清除响应流而是预先插入了他的错误。 为了规避这个问题,我将其配置为existingResponse=PassThrough,因为无论如何我们都有一个自定义错误页面。

【问题讨论】:

  • 您需要删除任何cookies吗? cookie 可能导致重定向到您删除的旧页面。查看嗅探器以帮助解决问题。

标签: c# asp.net asp.net-mvc iis


【解决方案1】:

您似乎想自定义错误页面,对吗? 据我所知,Http error可以用来处理IIS本身抛出的错误,而CustomError属性是用来处理DotNet code抛出的错误,因此,我通常结合这两个特性来自定义我这边所有错误的页面。

我建议您尝试以下配置来处理所有错误。这是一个示例配置。
Webconfig.

      <customErrors mode="On" defaultRedirect="/MyCustomError1.html" redirectMode="ResponseRedirect">
          <error statusCode="400" redirect="/MyCustomError400.html" />
          <error statusCode="401" redirect="/MyCustomError2.html" />
    <error statusCode="403" redirect="/MyCustomError2.html" />
    <error statusCode="404" redirect="/MyCustomError2.html" />
    <error statusCode="500" redirect="/MyCustomError2.html" />
      </customErrors>
  </system.web>
  <system.webServer>
      <httpErrors errorMode="Custom" existingResponse="Auto">
<!--we need remove the default HttpError-processing logic.-->
          <remove statusCode="400" />
          <remove statusCode="401" />
          <remove statusCode="403" />
          <remove statusCode="404" />
          <remove statusCode="500" />
          <error statusCode="400" path="MyHttpError.html" responseMode="File" />
          <error statusCode="401" path="MyHttpError.html" responseMode="File" />
          <error statusCode="403" path="MyHttpError.html" responseMode="File" />
          <error statusCode="404" path="MyHttpError.html" responseMode="File" />
          <error statusCode="500" path="MyHttpError.html" responseMode="File" />
      </httpErrors>
  </system.webServer>

结果。

详情请参考以下讨论。
What is the difference between customErrors and httpErrors?
这是在 IIS 端配置自定义错误的示例。
https://www.sherweb.com/blog/cloud-server/how-to-create-custom-error-pages-in-iis-7-5-with-asp-net/
如果有什么可以帮助的,请随时告诉我。

【讨论】:

  • 可能我不是很清楚,我不想要来自 IIS 的自定义错误页面,只是来自应用程序的错误页面。这看起来也很奇怪,IIS 错误消息并没有消失,而是在加载应用程序错误页面时插入到页面的开头。非常感谢您提供的信息,我会仔细研究它们。
  • 澄清一下:在上面的截图中,数字 1 到 5 来自我的应用程序错误页面,错误消息来自 IIS。因此,两个页面有点合并。
  • 我们可能需要删除默认的 HttpError 处理逻辑,如 webconfig 的上述 Http errors 部分。
  • 找到了解决办法,其实是应用问题,但是你的链接指向了我需要的提示,非常感谢。
猜你喜欢
  • 2014-05-15
  • 1970-01-01
  • 1970-01-01
  • 2013-10-08
  • 2021-09-06
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 2020-06-23
相关资源
最近更新 更多