Przekieruj do zewnętrznego identyfikatora URI z kontrolera ASP.NET MVC

170

Próbuję przekierować do zewnętrznego adresu URL z metody akcji, ale nie mogę go uruchomić. Czy ktoś może rzucić trochę światła na mój błąd?

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

Dzięki, Chris

user135498
źródło
1
Jaki jest twój błąd? Albo objaw? Czy to gdziekolwiek idzie?
Paul Sasik

Odpowiedzi:

342

Jeśli mówisz o ASP.NET MVC, powinieneś mieć metodę kontrolera, która zwraca:

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

W przeciwnym razie potrzebujemy więcej informacji o błędzie, który otrzymujesz w przekierowaniu. Przeszedłem, aby upewnić się, że adres URL nie jest pusty.

Yuriy Faktorovich
źródło
5
Opcjonalnie możesz to zrobić zamiast tego: return new RedirectResult ("yourURL", true); który jest prawie dokładnie taki sam, ale na końcu podaje parametr wskazujący, czy jest to stałe przekierowanie, czy nie (HTTP 301 czy coś innego, może 307?)
ctb
@ Mr.Pichler Najprawdopodobniej 302, ale zawsze możesz sprawdzić u Fiddlera.
Yuriy Faktorovich
1
Przekierowanie (rul) to 302, a RedirectPermanent (url) to 301. Sprawdź: stackoverflow.com/questions/17517318/ ...
TNT
Jakieś przemyślenia na temat tego, aby to działało z lokalnym plikiem HTML? Nie działa:> return Redirect ("C: /Users/Me/Documents/test.html");
Steve Eggering
1
@SteveEggering sprawdź stackoverflow.com/questions/10830212/…
Yuriy Faktorovich
15

Korzystanie z JavaScript

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

Uwaga: Jak powiedział @Jeremy Ray Brown, nie jest to najlepsza opcja, ale może się okazać przydatna w niektórych sytuacjach.

Mam nadzieję że to pomoże.

shaijut
źródło
1
Coś takiego może działać, ale kontroler decyduje, jaką akcję wykonać. Nie potrzebujesz skryptu, aby być zaangażowanym.
Jeremy Ray Brown
6
Wierz lub nie wierz, ale takie podejście mi pomogło. Mamy hybrydową aplikację ASP.NET MVC / AngularJS z wieloma starszymi kodami formularzy internetowych w każdym miejscu. Użyłem czegoś podobnego do przekierowania do adresu URL, który używa routingu Angular. Ponieważ routing kątowy podąża za znakiem # w adresie URL, jest rozpoznawany tylko po stronie klienta, więc przekierowania nie można używać do takich adresów URL.
sentyment
@TNT Tak, masz rację, podałem to jako opcję, która może być przydatna dla innych.
shaijut
1
Przepraszam, jeśli nie byłem grzeczny @stom. Używam tego podejścia, gdy potrzebuję uruchomić skrypt z przekierowaniem, na przykład policzyć jedną wizytę w Google Analytics.
TNT
To w końcu działa. Proste rozwiązanie przekierowania @Yuriy nie powiodło się. Ze względów bezpieczeństwa żądania kierowane do naszej aplikacji MVC muszą przeszukiwać przez serwer proxy - IIS z dodatkiem Rewrite + reguła przepisywania. Ta kombinacja prawdopodobnie miesza z przekierowaniem. Więc tj. kiedy chcę przekierować z example.com/action do example.org/?search=xyz , używając return Redirect("https://www.example.org/?search=xyz");wyniku jest przekierowanie do example.com/?search=xyz .
Kraken101
0

Może rozwiązanie, którego ktoś szuka, to:

Response.Redirect("/Sucesso")

Działa to również w przypadku użycia w Widoku.

Pedro Henrique Silva
źródło
-3

Spróbuj tego (użyłem kontrolera domowego i widoku indeksu):

return RedirectToAction("Index", "Home");
Yilmazam
źródło
Nie spowoduje to przekierowania do zewnętrznego identyfikatora URI, a zamiast tego do akcji indeksu na kontrolerze głównym.
Anthony Potts