Redireccionar a URI externo desde el controlador ASP.NET MVC

170

Estoy tratando de redirigir a una URL externa desde un método de acción, pero no puedo hacer que funcione. ¿Alguien puede arrojar algo de luz sobre mi error?

public void ID(string id)
    {
        string url = string.Empty;
        switch (id)
        {
            case "DB2FCB11-579F-4DA2-A68C-A6495B9BAAB5":

                url = "http://www.somesite.com";
                break;
        }
        Response.Redirect(url, true);
    }

Gracias Chris

usuario135498
fuente
1
Cual es tu error O síntoma? ¿Esto va a alguna parte?
Paul Sasik

Respuestas:

342

Si está hablando de ASP.NET MVC, entonces debería tener un método de controlador que devuelva lo siguiente:

return Redirect("http://www.google.com");

De lo contrario, necesitamos más información sobre el error que está recibiendo en la redirección. Pasaría para asegurarme de que la url no esté vacía.

Yuriy Faktorovich
fuente
55
Opcionalmente, puede hacer esto en su lugar: return new RedirectResult ("yourURL", true); que es casi exactamente lo mismo, pero le da el parámetro al final para indicar si es una redirección permanente o no (HTTP 301 vs. otra cosa, ¿307 quizás?)
ctb
@ Mr.Pichler Probablemente 302, pero siempre se puede consultar con Fiddler.
Yuriy Faktorovich
1
Redirect (rul) es 302 y RedirectPermanent (url) es 301. Compruebe: stackoverflow.com/questions/17517318/…
TNT
¿Alguna idea sobre cómo hacer que esto funcione con un archivo HTML local? No funciona:> return Redirect ("C: /Users/Me/Documents/test.html");
Steve Eggering
1
@SteveEggering echa un vistazo a stackoverflow.com/questions/10830212/…
Yuriy Faktorovich
15

Usando JavaScript

 public ActionResult Index()
 {
    return Content("<script>window.location = 'http://www.example.com';</script>");
 }

Nota: Como dijo @Jeremy Ray Brown, esta no es la mejor opción, pero puede ser útil en algunas situaciones.

Espero que esto ayude.

shaijut
fuente
1
Algo como esto puede funcionar, pero un controlador decide qué acción realizar. No necesita un guión para participar.
Jeremy Ray Brown
66
Lo creas o no, algo como este enfoque me ayudó. Tenemos una aplicación híbrida ASP.NET MVC / AngularJS con muchos códigos de formularios web más antiguos en todo el lugar. Usé algo similar para redirigir a una URL que usa enrutamiento angular. Debido a que el enrutamiento angular sigue una marca # en la URL, solo se reconoce en el lado del cliente, por lo que Redirect no se puede utilizar para tales URL.
thesentiment
@TNT Sí, tienes razón, solo proporcioné esto como una opción, que podría ser útil para otros.
shaijut
1
Lo siento si no fui educado @stom. Utilizo este enfoque cuando necesito ejecutar algún script con la redirección, como contar una visita en Google Analytics.
TNT
Esto finalmente funciona. La solución directa de redirección de @Yuriy falló para mí. Por razones de seguridad, las solicitudes que se dirigen a nuestra aplicación MVC deben rastrearse a través del servidor proxy: IIS con la regla Rewrite addin + rewrite. Esta combinación probablemente se mete con la URL de redireccionamiento. Entonces es decir. cuando quiero redirigir de example.com/action a example.org/?search=xyz , usar return Redirect("https://www.example.org/?search=xyz");el resultado es redirigir a example.com/?search=xyz .
Kraken101
0

Quizás la solución que alguien está buscando es esta:

Response.Redirect("/Sucesso")

Este trabajo también se usa en la Vista.

Pedro Henrique Silva
fuente
-3

Pruebe esto (he usado el controlador de inicio y la vista de índice):

return RedirectToAction("Index", "Home");
Yilmazam
fuente
Esto no redirigirá a un URI externo y en su lugar a la Acción de índice en el Home Controller.
Anthony Potts