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


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.


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.


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.



-3

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

return RedirectToAction("Index", "Home");

Esto no redirigirá a un URI externo y en su lugar a la Acción de índice en el Home Controller.
Anthony Potts
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.