我正在尝试在 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 页面。
我很困惑,是什么导致了重定向循环?
最佳答案
我已经能够复制您所描述的行为。当我将responseMode更改为文件时,我的问题被修复了。 IE。像这样
<httpErrors errorMode="Custom">
<remove statusCode="404" />
<error statusCode="404" path="404.html" responseMode="File" />
</httpErrors>
但也许问题是因为您已将 404.html 放在 mysite 文件夹中。假设它必须留在那里,我认为如果你这样做它应该可以工作
<httpErrors errorMode="Custom">
<remove statusCode="404" />
<error statusCode="404" path="/mysite/404.html" responseMode="Redirect" />
</httpErrors>
关于ASP.NET MVC 自定义错误页面陷入重定向循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63734451/