Reindirizzamento a URI esterno dal controller MVC ASP.NET


170

Sto cercando di reindirizzare all'URL esterno da un metodo di azione ma non riesco a farlo funzionare. Qualcuno può fare luce sul mio errore?

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

Grazie Chris


1
Qual è il tuo errore? O sintomo? Questo va da qualche parte?
Paul Sasik,

Risposte:


342

Se stai parlando di ASP.NET MVC, dovresti avere un metodo controller che restituisca quanto segue:

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

Altrimenti abbiamo bisogno di maggiori informazioni sull'errore che stai ricevendo nel reindirizzamento. Passerei attraverso per assicurarmi che l'URL non fosse vuoto.


5
Facoltativamente, puoi farlo invece: return new RedirectResult ("yourURL", true); che è quasi esattamente lo stesso, ma ti dà il parametro alla fine per indicare se si tratta di un reindirizzamento permanente o meno (HTTP 301 contro qualcos'altro, forse 307?)
CTB

@ Mr.Pichler Molto probabilmente 302, ma puoi sempre verificare con Fiddler.
Yuriy Faktorovich,

1
Redirect (regola) è 302 e RedirectPermanent (url) è 301. Verifica: stackoverflow.com/questions/17517318/…
TNT

Qualche idea su come farlo funzionare con un file HTML locale? Non funziona:> return Redirect ("C: /Users/Me/Documents/test.html");
Steve Eggering,


15

Utilizzando JavaScript

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

Nota: come ha detto @Jeremy Ray Brown, questa non è l'opzione migliore, ma potresti trovare utile in alcune situazioni.

Spero che questo ti aiuti.


1
Qualcosa del genere può funzionare, ma un controller decide quale azione eseguire. Non hai bisogno di una sceneggiatura per essere coinvolto.
Jeremy Ray Brown,

6
Che ci crediate o no, qualcosa come questo approccio mi ha aiutato. Abbiamo un'applicazione ibrida ASP.NET MVC / AngularJS con un sacco di codice di moduli web più vecchi ovunque. Ho usato qualcosa di simile al reindirizzamento a un URL che utilizza il routing angolare. Poiché il routing angolare segue un segno # nell'URL, viene riconosciuto solo dal lato client, pertanto il reindirizzamento non può essere utilizzato per tali URL.
thententiment

@TNT Sì, hai ragione, ho appena fornito questo come opzione, che potrebbe essere utile per gli altri.
Shaijut

1
Scusa se non ero educato @stom. Uso questo approccio quando devo eseguire alcuni script con il reindirizzamento, come contare una visita su Google Analytics.
TNT,

Questo finalmente funziona. La semplice soluzione di reindirizzamento di @Yuriy non è riuscita per me. Per motivi di sicurezza, le richieste che si dirigono verso la nostra applicazione MVC devono eseguire la ricerca per indicizzazione attraverso il server proxy: IIS con la regola di riscrittura addin + rewrite. Questa combinazione probabilmente fa casino con l'URL di reindirizzamento. Quindi cioè. quando voglio reindirizzare da example.com/action a example.org/?search=xyz , l'utilizzo return Redirect("https://www.example.org/?search=xyz");del risultato reindirizza a example.com/?search=xyz .
Kraken101

0

Forse la soluzione che qualcuno sta cercando è questa:

Response.Redirect("/Sucesso")

Questo lavoro viene utilizzato anche nella vista.



-3

Prova questo (ho usato Home controller e Index View):

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

Questo non reindirizzerà a un URI esterno e invece all'azione indice sul controller domestico.
Anthony Potts,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.