【发布时间】:2020-12-23 07:55:08
【问题描述】:
我正在尝试在我的 ASP.NET MVC 应用程序中显示自定义错误页面。 我知道有些错误是由 ASP.NET 处理的,而另一些是由 IIS 处理的。
ASP.NET 的处理和工作正常
<customErrors mode="On" defaultRedirect="~/Error/Index"/>
当我请求一个不存在的 URL 并引用像 .html 这样的静态页面时,我希望 IIS 来处理它。
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="http://localhost/MySite/404.html" responseMode="Redirect"/>
</httpErrors>
这行得通。但是我不想在那里硬编码 http://localhost 而是让它成为一个相对路径。
所以我尝试了
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="~/404.html" responseMode="Redirect"/>
</httpErrors>
但是,由于 URL 最终是 http://localhost/MySite/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/~/404.html,所以它一直在重定向我(它出现了)
如果我这样做也有效
<httpErrors errorMode="Custom">
<remove statusCode="404"/>
<error statusCode="404" path="404.html" responseMode="Redirect"/>
</httpErrors>
但当然只有当错误出现在 http://localhost/MySite/doesnotexist.html 根目录中而不是像 http://localhost/MySite/somedir/doesnotexist.html 这样的任何其他目录中时
如果我将 responseMode 更改为任何其他选项,它根本不起作用,显示默认的 IIS 404 页面。
我很疑惑,是什么导致了重定向循环?
【问题讨论】:
-
是 path="~/404.html" 只是没有得到正确的路径吗?即 Web 应用程序根目录?
标签: asp.net asp.net-mvc redirect iis custom-error-pages