首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何以编程方式从ASP.NET代码隐藏服务HTTP404并重定向到404页面?

如何以编程方式从ASP.NET代码隐藏服务HTTP404并重定向到404页面?
EN

Stack Overflow用户
提问于 2012-07-19 21:09:26
回答 2查看 3.4K关注 0票数 2

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

代码语言:javascript
运行
AI代码解释
复制
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代码。

我试过了:

代码语言:javascript
运行
AI代码解释
复制
Response.StatusCode = 404;

这将正确设置404代码,但会继续呈现页面。我也尝试过这个:

代码语言:javascript
运行
AI代码解释
复制
throw new HttpException(404, "Not Found");

但这与处理任何其他未捕获的异常(通过302重定向到服务器错误页面)做的事情是一样的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-19 21:16:13

如果你不想要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。

票数 2
EN

Stack Overflow用户

发布于 2012-07-19 21:15:30

在web应用程序的web.config中使用CustomErrors属性

代码语言:javascript
运行
AI代码解释
复制
<configuration>
  <system.web>
    <customErrors defaultRedirect="GenericError.htm"
                  mode="RemoteOnly">
      <error statusCode="404"
             redirect="My404Page.aspx"/>
    </customErrors>
  </system.web>
</configuration>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11569355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档