Redirection vers l'URI externe à partir du contrôleur ASP.NET MVC

170

J'essaie de rediriger vers une URL externe à partir d'une méthode d'action mais je ne parviens pas à la faire fonctionner. Quelqu'un peut-il faire la lumière sur mon erreur?

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);
    }

Merci Chris

user135498
la source
1
Quelle est votre erreur? Ou symptôme? Cela va-t-il quelque part?
Paul Sasik

Réponses:

342

Si vous parlez d'ASP.NET MVC, vous devez disposer d'une méthode de contrôleur qui renvoie ce qui suit:

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

Sinon, nous avons besoin de plus d'informations sur l'erreur que vous obtenez dans la redirection. Je ferais un pas pour m'assurer que l'URL n'est pas vide.

Yuriy Faktorovich
la source
5
Si vous le souhaitez, vous pouvez le faire à la place: return new RedirectResult ("yourURL", true); qui est presque exactement le même, mais vous donne le paramètre à la fin pour indiquer s'il s'agit d'une redirection permanente ou non (HTTP 301 vs autre chose, 307 peut-être?)
ctb
@ Mr.Pichler Probablement 302, mais vous pouvez toujours vérifier avec Fiddler.
Yuriy Faktorovich
1
Redirect (rul) est 302 et RedirectPermanent (url) est 301. Vérifiez: stackoverflow.com/questions/17517318/...
TNT
Avez-vous des idées pour que cela fonctionne avec un fichier HTML local? Ne fonctionne pas:> return Redirect ("C: /Users/Me/Documents/test.html");
Steve Eggering
1
@SteveEggering consultez stackoverflow.com/questions/10830212/…
Yuriy Faktorovich
15

Utilisation de JavaScript

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

Remarque: comme @Jeremy Ray Brown l'a dit, ce n'est pas la meilleure option, mais vous pourriez trouver utile dans certaines situations.

J'espère que cela t'aides.

shaijut
la source
1
Quelque chose comme cela peut fonctionner, mais un contrôleur décide de l'action à effectuer. Vous n'avez pas besoin d'un script pour être impliqué.
Jeremy Ray Brown
6
Croyez-le ou non, quelque chose comme cette approche m'a aidé. Nous avons une application hybride ASP.NET MVC / AngularJS avec beaucoup d'anciens codes de formulaires Web partout. J'ai utilisé quelque chose de similaire pour rediriger vers une URL qui utilise le routage angulaire. Étant donné que le routage angulaire suit une marque # dans l'URL, il n'est reconnu que côté client, la redirection ne peut donc pas être utilisée pour de telles URL.
thesentiment
@TNT Oui, vous avez raison, je viens de fournir cette option, ce qui pourrait être utile pour d'autres.
shaijut
1
Désolé si je n'étais pas poli @stom. J'utilise cette approche lorsque je dois exécuter un script avec la redirection, comme compter une visite sur Google Analytics.
TNT
Cela fonctionne enfin. La solution de redirection simple de @Yuriy a échoué pour moi. Pour des raisons de sécurité, les demandes adressées à notre application MVC doivent parcourir le serveur proxy - IIS avec complément de réécriture + règle de réécriture. Cette combinaison perturbe probablement l'URL de redirection. Donc c'est à dire. lorsque je veux rediriger de example.com/action vers example.org/?search=xyz , utiliser return Redirect("https://www.example.org/?search=xyz");le résultat redirige vers example.com/?search=xyz .
Kraken101
0

Peut-être que la solution que quelqu'un recherche est la suivante:

Response.Redirect("/Sucesso")

Cela fonctionne également lorsqu'il est utilisé dans la vue.

Pedro Henrique Silva
la source
-3

Essayez ceci (j'ai utilisé le contrôleur Home et la vue d'index):

return RedirectToAction("Index", "Home");
Yilmazam
la source
Cela ne redirigera pas vers un URI externe et à la place vers l'action d'index sur le contrôleur domestique.
Anthony Potts