asp.net mvc - retornar - Devolución de una redirección 301 desde una acción de controlador
redirecttoaction ejemplos (4)
¿Eso ayuda? http://blog.eworldui.net/post/2008/04/ASPNET-MVC---Legacy-Url-Routing.aspx
Parece que solo necesitarías reemplazar la ruta virtual por una URL de tu agrado.
En ASP.net MVC, ¿cuál es la forma "correcta" de que un controlador devuelva un redireccionamiento 301 a un sitio externo?
Las diversas funciones RedirectTo-Function parecen solo devolver enlaces relativos o rutas que he mapeado manualmente, pero no hay forma de decir "Realizar un redireccionamiento 301 a http://example.com ".
Creo que podría simplemente establecer Response.StatusCode o usar Response.Redirect, pero ¿es así como debe hacerse en MVC? ¿O hay una "forma correcta" oficial de realizar redirecciones?
Actualización: Mientras tanto, escribí un ActionResult para eso: PermanentRedirectResult
Actualización 2: desde ASP.net 4.0, los redireccionamientos permanentes son parte del Framework .
Realizo redirecciones para admitir URL heredadas.
Mi controlador se parece a esto ...
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
Ahora me pregunto si podría manejar esto más limpiamente con dos rutas y funciones de controlador.
Utilizar
Response.RedirectPermanent("http://www.google.com");
o para devolver un tipo ActionResult desde un controlador:
return RedirectPermanent("http://www.google.com");
provisto por el framework ASP.net 4.0.
Ya que está hablando de redireccionar a una URL que no sabe nada sobre el enrutamiento (ya sea una página interna (piense en ASP.NET clásico), o algún recurso externo), entonces lo único que puede hacer es establecer el código de estado. y enviar el navegador del usuario en su camino.
En esta cadena en MVC, le preocupa que el usuario obtenga su Vista, pero esa Vista no está bajo su control y puede que ni siquiera sea una Vista. Entonces, en última instancia, estás haciendo lo mejor que puedes en esta circunstancia y, que yo sepa, no están incumpliendo ninguna "regla" de MVC.
Espero que eso ayude.