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


80

Redirect()和之间有什么区别RedirectPermanent()。我已经阅读了一些文章,但是我不明白何时必须使用Redirect()and RedirectPermanent()。您能举个例子吗?

Answers:


145

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

使用RedirectPermanent如果资源已被永久删除,将不再是先前的位置访问。大多数浏览器将缓存此响应并自动执行重定向,而无需再次请求原始资源。

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

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

如果永远不会恢复用户,则应该使用RedirectPermanent/user/does-not-exist即使URL指向,浏览器也可以直接进入后续请求/user/{userid}

如果将来有可能恢复用户,则应使用常规的Redirect



6
请注意,RedirectPermanent在调试时可能会很烦人,因为第二次单击时,如果控制器重定向到其他位置,则将跳过控制器的操作并且原始功能中不会达到断点。除非您在每次单击之前清空缓存。
Antoine Pelletier,

如果您曾经犯​​过滥用永久重定向的错误,是否可以将其传达给已经访问并收到永久重定向的浏览器?
eaglei22 '18

17

RedirectPermanent是301和Redirect302状态代码


12
作为参考,浏览器可能会记住301,并且如果愿意的话也不会再打原始URL,而302则表示如果重定向仍然存在,它们应该每次都重新检查一次。实际的实现方式当然可能会有所不同,但这就是301和302背后的意图
Michael Stum

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.