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


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.


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


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.


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.



-3

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

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

Cela ne redirigera pas vers un URI externe et à la place vers l'action d'index sur le contrôleur domestique.
Anthony Potts
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.