ASP.NET MVC 中的 Redirect() 与 RedirectPermanent()

Posted

技术标签:

【中文标题】ASP.NET MVC 中的 Redirect() 与 RedirectPermanent()【英文标题】:Redirect() vs RedirectPermanent() in ASP.NET MVC 【发布时间】:2013-07-05 05:38:50 【问题描述】:

Redirect()RedirectPermanent() 有什么区别。我读过一些文章,但我不明白什么时候必须使用Redirect()RedirectPermanent()。你能举个例子吗?

【问题讨论】:

【参考方案1】:

两者的基本区别在于RedirectPermanent 向浏览器发送HTTP 301(永久移动)状态码,而Redirect 将发送HTTP 302 状态码。

如果资源已被永久移动并且在之前的位置将不再可访问,请使用 RedirectPermanent。大多数浏览器会缓存这个响应并自动执行重定向,而无需再次请求原始资源。

如果资源将来可能在同一位置 (URL) 可用,请使用 Redirect

示例

假设您的系统中有用户。您还可以选择删除现有用户。您的网站有一个资源/user/userid,它显示给定用户的详细信息。如果用户已被删除,您必须重定向到/user/does-not-exist 页面。在这种情况下:

如果用户将永远再次恢复,则应使用RedirectPermanent,以便浏览器在后续请求中可以直接转到/user/does-not-exist,即使URL指向/user/userid

如果将来用户可能会恢复,您应该使用普通的Redirect

【讨论】:

***.com/questions/1393280/… 请注意,RedirectPermanent 在调试时可能会很烦人,因为第二次单击时,控制器的操作将被跳过,并且如果它重定向到其他地方,则不会在原始函数中达到断点。除非您在每次点击之前清空缓存。 如果您误用了永久重定向,有没有办法将其传达给已经访问并收到永久重定向的浏览器? @eaglei22 已经两年半了,所以您可能已经弄清楚了。但为了以防万一(以及对于未来的读者),删除网络历史记录就可以了。是的,它吸了一袋疯狂的猴子。这就是为什么我使用与实际浏览不同的浏览器进行开发。是的,有时这也很糟糕。 :) @Meryovi:我遇到了一个场景,我想将用户重定向到不同的 URL,比如说 example.com(外部 URL),那么更推荐哪个选项?发送!【参考方案2】:

RedirectPermanent 是 301,Redirect 是 302 状态码

【讨论】:

作为参考,浏览器可能会记住 301,并且如果他们愿意,就不会再次点击原始 URL,而 302 表示如果重定向仍然存在,他们应该每次重新检查。实际的实现当然可能会有所不同,但这就是 301 和 302 背后的意图【参考方案3】:

它们向浏览器发送不同的响应代码。 301 是永久重定向,302 是临时重定向。最终效果是一样的,但是如果客户端想要索引链接(最常见的客户端将是搜索引擎),那么永久重定向会告诉客户端更新其记录以忽略旧链接并开始使用新链接.临时重定向告诉客户端页面现在正在重定向,但不会从其索引数据库中删除旧链接

【讨论】:

以上是关于ASP.NET MVC 中的 Redirect() 与 RedirectPermanent()的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET MVC 中是不是有等价于 redirect_to :back

在 ASP.NET MVC 控制器中,如何让 Redirect(string URL) 方法不附加“#”?

ASP.NET MVC 处理错误

MVC-3 ASP.NET 共享视图-重定向-Razor

ASP.NET MVC:如何在 localhost 上自动禁用 [RequireHttps]?

HTTPServerUtility.Transfer 是不是比 Response.Redirect 在 asp.net 中的网站性能更有用?