Response.Redirect HTTP状态代码

为什么ASP / ASP.NET Response.Redirect使用HTTP-302状态代码(“暂时移动”),即使在大多数情况下HTTP-301状态代码(“永久移动”)更合适?

状态301的响应应该是可缓存的,我认为您不希望大多数ASP / ASP.NET重定向的行为。

如果需要,ASP.NET 4.0具有RedirectPermanent方法。

我已经成功使用了这个方便的永久重定向:

public void RedirectPermanent(string newPath) { HttpContext.Current.Response.Clear(); HttpContext.Current.Response.Status = "301 Moved Permanently"; HttpContext.Current.Response.AddHeader("Location", newPath); HttpContext.Current.Response.End(); } 

Response.Redirect一个常见用例是在回发后将用户移动到服务器端代码中的另一个页面,例如

 private void MyButton_Click(object sender, EventArgs e) { if (some condition) { Response.Redirect("ShowProduct.aspx"); } else { Response.Redirect("SorryOutOfStock.aspx"); } } 

在这些情况下,301将是完全错误的。 事实上,我认为上述情况(在一些UI交互之后有条件地将用户移动到另一个页面)是一个更常见的Response.Redirect使用,而不是真正的这个页面移动到另一个URL永远的场景(其中返回代码301是合适的)。

除了Heinzi的答案之外,网上唯一可能会注意到301的实体将是搜索引擎。 大多数浏览器不会跟踪和记录301,以便自动重定向任何后续的初始URL请求。 浏览器对301的处理方式与302处理方式相同。因此,动态内容中的302(例如在ASP.NET中生成)非常合适。

你得到的错误不是由于response.redirect!

HTTP响应状态代码301 Moved Permanently用于永久重定向,这意味着使用收到301 Moved Permanently响应的URL的当前链接或记录应更新为响应的Location字段中提供的新URL。