在ASP.net MVC上,让控制器将301重定向返回到外部站点的“正确”方法是什么?
各种RedirectTo-Function似乎只返回我手动映射的相对链接或路由,但没有办法说“执行301重定向到http://example.com”。
我想我可以设置Response.StatusCode或使用Response.Redirect,但是它应该在MVC中完成吗?或者是否有正式的“正确方式”来执行重定向?
更新:与此同时,我为此写了一个ActionResult:PermanentRedirectResult
更新2:自ASP.net 4.0起,永久重定向为part of the Framework。
答案 0 :(得分:19)
使用
Response.RedirectPermanent("http://www.google.com");
或从控制器返回ActionResult类型:
return RedirectPermanent("http://www.google.com");
由ASP.net 4.0框架提供。
答案 1 :(得分:1)
由于您正在谈论重定向到您不了解路由的URL(是内部页面(想想经典的ASP.NET)或某些外部资源),那么您唯一能做的就是设置状态代码,并在途中发送用户的浏览器。
在MVC的这个链中你担心让用户进入他们的View,但是View不在你的控制之下,甚至可能根本不是View。所以最终你在这种情况下做得最好,据我所知,并没有打破任何MVC“规则”。
我希望有所帮助。
答案 2 :(得分:1)
我执行重定向以支持旧版网址。
我的控制器看起来像这样...
Public Class ThingController
Inherits System.Web.Mvc.Controller
Function Details(ByVal id As String) As ActionResult
Dim RedirectId As Guid
Select Case key
Case "legacyurlone"
RedirectId = New Guid("c564c0c1-c365-4b0c-bc33-fd4eadf0551b")
Case "legacyurltwo"
RedirectId = New Guid("157fa15b-8d5d-4f04-87cc-434f7ae93dfa")
Case Else
RedirectId = Guid.Empty
End Select
If Not RedirectId = Guid.Empty Then
Response.StatusCode = Net.HttpStatusCode.MovedPermanently
Response.RedirectLocation = Url.RouteUrl("IdOnly", New With {.id = RedirectId})
Return Nothing
End If
Dim ThingId As Guid = New Guid(id)
Dim db As New ThingEntities
Dim Model As Thing = ...
Return View(Model)
End Function
...
End Class
我现在想知道是否可以使用两个路径和控制器功能更清晰地处理它。
答案 3 :(得分:0)
这对你有帮助吗? http://blog.eworldui.net/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx
看起来您只需要用您喜欢的URL替换虚拟路径。