Redirecionar para URI externo do controlador ASP.NET MVC

170

Estou tentando redirecionar para um URL externo a partir de um método de ação, mas não consigo fazê-lo funcionar. Alguém pode lançar alguma luz sobre o meu erro?

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

Obrigado Chris

user135498
fonte
1
Qual é o seu erro? Ou sintoma? Isso vai a algum lugar?
22310 Paul Sasik

Respostas:

342

Se você está falando sobre o ASP.NET MVC, deve ter um método de controlador que retorne o seguinte:

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

Caso contrário, precisamos de mais informações sobre o erro que você está recebendo no redirecionamento. Eu passo para garantir que o URL não esteja vazio.

Yuriy Faktorovich
fonte
5
Opcionalmente, você pode fazer isso: retornar new RedirectResult ("yourURL", true); que é quase exatamente o mesmo, mas dá-lhe o parâmetro no final para indicar se se trata de um redirecionamento permanente ou não (HTTP 301 vs. outra coisa, 307 talvez?)
CTB
@ Mr.Pichler Provavelmente 302, mas você sempre pode verificar com o Fiddler.
Yuriy Faktorovich
1
Redirect (rul) é 302 e RedirectPermanent (url) é 301. Verifique: stackoverflow.com/questions/17517318/…
TNT
Alguma idéia de como fazer isso funcionar com um arquivo HTML local? Não funciona:> return Redirect ("C: /Users/Me/Documents/test.html");
Steve Eggering
1
@SteveEggering check-out stackoverflow.com/questions/10830212/...
Yuriy Faktorovich
15

Usando JavaScript

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

Nota: Como disse Jeremy Ray Brown, esta não é a melhor opção, mas você pode achar útil em algumas situações.

Espero que isto ajude.

shaijut
fonte
1
Algo assim pode funcionar, mas um controlador decide qual ação executar. Você não precisa de um script para estar envolvido.
Jeremy Ray Brown
6
Acredite ou não, algo como essa abordagem me ajudou. Temos um aplicativo híbrido do ASP.NET MVC / AngularJS com muitos códigos de formulários da Web mais antigos em todo o lugar. Usei algo semelhante para redirecionar para um URL que usa roteamento angular. Como o roteamento angular segue uma marca # no URL, ele é reconhecido apenas no lado do cliente; portanto, o redirecionamento não pode ser utilizado para esses URLs.
Thesentiment 6/04/2016
@ TNT Sim, você está correto, eu apenas forneci isso como uma opção, o que pode ser útil para outras pessoas.
shaijut
1
Desculpe se eu não fui educado @stom. Uso essa abordagem quando preciso executar algum script com o redirecionamento, como contar uma visita no Google Analytics.
TNT
Isso finalmente funciona. A solução de redirecionamento direto da @Yuriy falhou para mim. Por motivos de segurança, as solicitações que direcionam ao nosso aplicativo MVC devem rastrear pelo servidor proxy - IIS com regra de reescrita de add-in + reescrita Essa combinação provavelmente mexe com o URL de redirecionamento. Então, ie. quando desejo redirecionar de example.com/action para example.org/?search=xyz , return Redirect("https://www.example.org/?search=xyz");o resultado é redirecionado para example.com/?search=xyz .
Kraken101
0

Talvez a solução que alguém esteja procurando seja a seguinte:

Response.Redirect("/Sucesso")

Este trabalho também é usado no modo de exibição.

Pedro Henrique Silva
fonte
-3

Tente isso (usei o controle doméstico e a exibição de índice):

return RedirectToAction("Index", "Home");
Yilmazam
fonte
Isso não será redirecionado para um URI externo e, em vez disso, para a Ação de Índice no Controlador Doméstico.
Anthony Potts