gpt4 book ai didi

asp.net - 如何以编程方式从 ASP.NET 代码隐藏提供 HTTP 404 并重定向到 404 页面?

转载 作者:行者123 更新时间:2023-12-04 05:38:43 25 4
gpt4 key购买 nike

我有一个 ASP.NET 应用程序,如果找不到请求的内容,它有时会重定向到 404 页面。这是这样做的:

var data = MyDatabase.RetrieveData(dataID);
if (data == null)
Response.Redirect("~/My404Page.aspx");

这对用户很有用。但这导致 302 Found (重定向),而不是 404 Not Found ,这对于搜索爬虫来说并不理想。我想返回 404 状态代码,并且仍然向用户显示有用的内容。

名门 internet's most awkard 404 page做这个;如果您在该域中输入错误的 URL 并使用类似 Fiddler 的工具查看结果,您实际上会得到一个 404 代码。

我试过这个:
Response.StatusCode = 404;

这会正确设置 404 代码,但会继续呈现页面。我也试过这个:
throw new HttpException(404, "Not Found");

但这与处理任何其他未捕获异常(通过 302 重定向到服务器错误页面)的作用相同。

我已经找到了一种通过一些自定义逻辑在我的应用程序中解决此问题的方法,该逻辑涉及自己设置状态代码并编写一个 javascript 重定向到响应。但是我想要的是一种在代码隐藏中表示该请求应该停止处理并重定向到 404 错误页面(我相信可以在 IIS 或 web.config 中指定)的方法。这可能吗?

最佳答案

如果您不想要 302 重定向,则需要执行 Server.Transfer 而不是 Repsonse.Redirect。 Response.Redirect() 将响应发送回浏览器,告诉它加载您的 ~/My404Page.aspx。 Server.Transfer() 将控制权转移到您的 ~/My404Page.aspx 而不返回浏览器,这意味着您的浏览器不会收到 302 重定向消息。

您还需要确保在 404 页面上将 Response.StatusCode 属性设置为 404。

或者,如果您抛出 HttpException,您可以通过设置 redirectMode property to ResponseRewrite 重定向到您的自定义 404 页面,而无需在服务器中执行 302 .这仅适用于较新版本的 ASP.NET。

关于asp.net - 如何以编程方式从 ASP.NET 代码隐藏提供 HTTP 404 并重定向到 404 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11569355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com