.net - 为什么在 ASP.NET 中只有某些页面会出现自定义 http 错误?

标签 .net asp.net iis web-config

我的网站出现问题:

自定义错误对我不起作用。这应该将一般错误重定向到一个页面,并将 404 错误重定向到另一个页面。它可以在本地运行,但不能在托管环境中运行。

<customErrors defaultRedirect="GeneralError.aspx" mode="on">
    <error statusCode="404" redirect="404Error.aspx" />
</customErrors>

编辑:好的,我对错误进行了更多测试,它似乎适用于以下页面:

www.[域名].com/doesntexist.aspx

但不适合

www.[域名].com/doesntexist

只有当我把 .aspx 放在那里时它才有效。

编辑:有人知道我如何制作它,以便它适用于这两种情况吗?

最佳答案

这与您的主机运行的 IIS 配置和版本有关。在 IIS 7 之前的版本中,或者如果您使用“经典管道”运行 IIS 7,则 http 请求实际上会经过两个 channel 。一个通过 ASP.net 处理 .net 请求,另一个管道转到 IIS。 (即 ASPX 转到 asp.net,.jpg 转到 IIS)

在您的情况下,不存在的页面将转到 IIS,您指定的 asp.net congi 不适用。我敢打赌,如果您输入 www.[domain].com/doesntexist.jpg 它不会转到您的自定义页面,但如果您输入 www.[domain].com/doesntexist.aspx 它会。

根据您拥有的 IIS 版本,有多种解决方案。如果您的主机使用 IIS7,那么您可以使用 Integrated Pipeline 运行该站点。 ,这意味着所有请求都通过 ASP.net 并且配置将适用。 Here is more info.

如果您没有运行 IIS,则只能通过 specifying the custom error codes in IIS itself 修复此问题。如果是这种情况,希望您的主机允许这样做。

IIS6 的另一种可能性是为非 .net 页面和文件创建自定义处理程序,并强制它们路由到 asp.net,然后应用您的配置。但这是不可取的,因为它可能会成为维护噩梦和额外的代码/配置。

相关SO问题:

IIS overriding custom 404 error page in ASP.NET

How to get Custom Error Pages working for Classic ASP with IIS 7 Integrated Pipeline

Site not redirecting to Default Document in Classic pipeline mode

关于.net - 为什么在 ASP.NET 中只有某些页面会出现自定义 http 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324185/

相关文章:

json - 错误 404.3 未找到 JSON 文件

c# - Winforms:确定鼠标光标是否离开模式对话框的边界

.net - 为什么 BinaryReader.ReadUInt32() 反转位模式?

javascript - 为什么不在 MVC 应用程序中的所有操作上使用异步?

c# - 在浏览器关闭时运行服务器端功能

http - 在 Azure Web 应用服务中从 https 重定向到 http

php - 在 IIS PHP 站点中获取随机 404 错误

c# - 如何用 Mono 引用这些包以便编译

javascript - 如何将金额类型更改为数字类型以在javascript中执行算术运算

c# - 如何使用多个提交按钮实现验证控件