旧 ASP.Net 应用程序中的自定义错误页面不起作用
Posted
技术标签:
【中文标题】旧 ASP.Net 应用程序中的自定义错误页面不起作用【英文标题】:Custom Error Pages in Old ASP.Net Applications Not Working 【发布时间】:2022-01-16 01:05:48 【问题描述】:我有几个较旧的 ASP.Net WebForms 应用程序,我最近对其进行了更改以支持自定义错误页面。错误页面只能查找 404 错误,除非 404 状态代码是使用后面的代码以编程方式生成的。
在这种特定情况下,我已将 WebForms 配置为在加载隐藏字段时返回 404 错误。每当有人尝试访问表单并且 DetailsView 没有要显示的相关记录时,就会加载隐藏字段。发生这种情况时,我一直在通过 301 将用户重定向到不同的页面。我选择了 301 而不是 404,因为当时有证据表明搜索引擎仍然会将反向链接归功于您的网站,这些反向链接指向返回 301 状态代码的页面,但如果它们返回 404 状态代码,则链接不会被计算在内,所以对于尽可能多的丢失物品,最好返回“永久移动”状态而不是“未找到”状态。多年来,谷歌似乎已经开始认识到他们所谓的“软 404”,其中包括被重定向到完全不同页面的页面。现在我认为 404 会更好,而且以它们为食的网站想要一种方法让用户在源 URL 失效时删除过时的内容。
我现在遇到的问题是,虽然返回了404错误,但是没有加载自定义错误页面。我什至没有得到标准的 IIS 错误页面。我只是在我的浏览器中收到一个错误,上面写着 “找不到这个 example.com 页面没有找到网址的网页:https://example.com/missingpage.aspx HTTP ERROR 404”但是如果我尝试加载不存在的物理文件,自定义错误页面会正确显示。
我的 web.config 有以下几行代码
<customErrors mode="RemoteOnly" defaultRedirect="~/error/">
<error statusCode="404" redirect="~/error/"/>
<error statusCode="500" redirect="~/error/"/>
</customErrors>
<system.webServer>
<httpErrors errorMode="Custom">
<remove statusCode="404" />
<error statusCode="404" path="/error/" responseMode="ExecuteURL" />
<remove statusCode="500" />
<error statusCode="500" path="/error/" responseMode="ExecuteURL" />
</httpErrors>
</system.webServer>
然后在我的 .aspx 页面中我有这个:
protected void HiddenField1_Load(object sender, EventArgs e)
Response.Clear();
Response.Status = "404 Not Found";
Response.StatusCode = 404;
Response.End();
这些站点与另一个使用类似方法来实现预期结果的站点之间的唯一区别是,另一个站点最初是使用 ASP.Net 4+ 设计的,而其他站点是使用 ASP.Net 2.0 设计的,但后来升级了到框架的更新版本,并且另一个站点在检查 ObjectDataSource 以匹配活动帖子后将重定向添加到页面加载事件。
更新:今天我意识到错误出现在 Response.End 中,但是如果我去掉 Response.End,我会收到一个错误,即在 DetailsView 中找不到标签。这在加载空数据模板中的隐藏字段的情况下是有意义的。
【问题讨论】:
【参考方案1】:在我的web.config file
我有这样的东西。
<customErrors defaultRedirect="/ErrorFiles/Internal_Server_Error.html" mode="Off">
<error statusCode="403" redirect="/ErrorFiles/NoAccess.html" />
<error statusCode="404" redirect="/ErrorFiles/Not_Found.html" />
<error statusCode="503" redirect="/ErrorFiles/Maintenance.html" />
</customErrors>
【讨论】:
问题似乎与 Response.End 相关以上是关于旧 ASP.Net 应用程序中的自定义错误页面不起作用的主要内容,如果未能解决你的问题,请参考以下文章