Umleitung vom ASP.NET MVC-Controller zum externen URI

170

Ich versuche, von einer Aktionsmethode zu einer externen URL umzuleiten, kann sie jedoch nicht zum Laufen bringen. Kann jemand etwas Licht auf meinen Fehler werfen?

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

Danke, Chris

user135498
quelle
1
Was ist dein Fehler? Oder Symptom? Geht das irgendwo hin?
Paul Sasik

Antworten:

342

Wenn Sie über ASP.NET MVC sprechen, sollten Sie über eine Controller-Methode verfügen, die Folgendes zurückgibt:

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

Andernfalls benötigen wir weitere Informationen zu dem Fehler, den Sie bei der Weiterleitung erhalten. Ich würde durchgehen, um sicherzustellen, dass die URL nicht leer ist.

Yuriy Faktorovich
quelle
5
Optional können Sie stattdessen Folgendes tun: return new RedirectResult ("yourURL", true); Das ist fast genau das gleiche, aber gibt Ihnen den Parameter am Ende, um anzuzeigen, ob es sich um eine permanente Weiterleitung handelt oder nicht (HTTP 301 vs. etwas anderes, 307 vielleicht?)
ctb
@ Mr.Pichler Höchstwahrscheinlich 302, aber Sie könnten immer mit Fiddler sprechen.
Yuriy Faktorovich
1
Redirect (Regel) ist 302 und RedirectPermanent (URL) ist 301. Check: stackoverflow.com/questions/17517318/…
TNT
Haben Sie Gedanken darüber, wie dies mit einer lokalen HTML-Datei funktioniert? Funktioniert nicht:> return Redirect ("C: /Users/Me/Documents/test.html");
Steve Eggering
1
@SteveEggering check out stackoverflow.com/questions/10830212/…
Yuriy Faktorovich
15

Verwenden von JavaScript

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

Hinweis: Wie @Jeremy Ray Brown sagte, ist dies nicht die beste Option, aber Sie können sie in einigen Situationen nützlich finden.

Hoffe das hilft.

Shaijut
quelle
1
So etwas kann funktionieren, aber ein Controller entscheidet, welche Aktion ausgeführt werden soll. Sie benötigen kein Skript, um beteiligt zu sein.
Jeremy Ray Brown
6
Ob Sie es glauben oder nicht, so etwas hat mir geholfen. Wir haben eine hybride ASP.NET MVC / AngularJS-Anwendung mit vielen älteren Webformularen, die überall Code enthalten. Ich habe etwas Ähnliches verwendet, um zu einer URL umzuleiten, die Angular-Routing verwendet. Da Angular Routing in der URL einem # -Zeichen folgt, wird es nur clientseitig erkannt, sodass Redirect für solche URLs nicht verwendet werden kann.
Thesentiment
@TNT Ja, Sie haben Recht, ich habe dies nur als Option angegeben, was für andere nützlich sein könnte.
Shaijut
1
Entschuldigung, wenn ich nicht höflich war @stom. Ich verwende diesen Ansatz, wenn ich ein Skript mit der Umleitung ausführen muss, z. B. einen Besuch bei Google Analytics zählen.
TNT
Das funktioniert endlich. Die einfache Weiterleitungslösung von @Yuriy ist für mich fehlgeschlagen. Aus Sicherheitsgründen müssen Anforderungen, die an unsere MVC-Anwendung gesendet werden, über den Proxyserver IIS mit Rewrite-Add-In + Rewrite-Regel gecrawlt werden. Diese Kombination führt wahrscheinlich zu einer Umleitung der URL. Also dh. Wenn ich von example.com/action zu example.org/?search=xyz umleiten möchte , wird die Verwendung return Redirect("https://www.example.org/?search=xyz");des Ergebnisses zu example.com/?search=xyz umgeleitet .
Kraken101
0

Vielleicht ist die Lösung, nach der jemand sucht, folgende:

Response.Redirect("/Sucesso")

Diese Funktion funktioniert auch in der Ansicht.

Pedro Henrique Silva
quelle
-3

Versuchen Sie Folgendes (ich habe Home Controller und Indexansicht verwendet):

return RedirectToAction("Index", "Home");
Yilmazam
quelle
Dies wird nicht zu einem externen URI und stattdessen zur Indexaktion auf dem Home Controller umgeleitet.
Anthony Potts