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


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.


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


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.


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.



-3

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

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

Dies wird nicht zu einem externen URI und stattdessen zur Indexaktion auf dem Home Controller umgeleitet.
Anthony Potts
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.