【发布时间】:2013-07-05 05:38:50
【问题描述】:
Redirect() 和 RedirectPermanent() 有什么区别。我读过一些文章,但我不明白什么时候必须使用Redirect() 和RedirectPermanent()。你能举个例子吗?
【问题讨论】:
标签: asp.net-mvc
Redirect() 和 RedirectPermanent() 有什么区别。我读过一些文章,但我不明白什么时候必须使用Redirect() 和RedirectPermanent()。你能举个例子吗?
【问题讨论】:
标签: asp.net-mvc
两者的基本区别在于RedirectPermanent 向浏览器发送HTTP 301(永久移动)状态码,而Redirect 将发送HTTP 302 状态码。
如果资源已被永久移动并且在之前的位置将不再可访问,请使用 RedirectPermanent。大多数浏览器会缓存这个响应并自动执行重定向,而无需再次请求原始资源。
如果资源将来可能在同一位置 (URL) 可用,请使用 Redirect。
示例
假设您的系统中有用户。您还可以选择删除现有用户。您的网站有一个资源/user/{userid},它显示给定用户的详细信息。如果用户已被删除,您必须重定向到/user/does-not-exist 页面。在这种情况下:
如果用户将永远再次恢复,则应使用RedirectPermanent,以便浏览器在后续请求中可以直接转到/user/does-not-exist,即使URL指向/user/{userid}。
如果将来用户可能会恢复,您应该使用普通的Redirect。
【讨论】:
RedirectPermanent 在调试时可能会很烦人,因为第二次单击时,控制器的操作将被跳过,并且如果它重定向到其他地方,则不会在原始函数中达到断点。除非您在每次点击之前清空缓存。
RedirectPermanent 是 301,Redirect 是 302 状态码
【讨论】:
它们向浏览器发送不同的响应代码。 301 是永久重定向,302 是临时重定向。最终效果是一样的,但是如果客户端想要索引链接(最常见的客户端将是搜索引擎),那么永久重定向会告诉客户端更新其记录以忽略旧链接并开始使用新链接.临时重定向告诉客户端页面现在正在重定向,但不会从其索引数据库中删除旧链接
【讨论】: