2013-05-21 2 views
2

ASP.NET MVC 4 ProjectКак перенаправить на внешний URL-адрес контроллера?

Как перенаправить на внешний URL из HTTP -> HTTPS с контроллера? Я не могу просто набрать:

var url = @"https://www.someurl.com" 
return Redirect(url); 

он не работает.

Также я попытался это:

var uri = new UriBuilder(url) 
{ 
    Scheme = Uri.UriSchemeHttps 
}; 
return Redirect(uri.ToString()); 
+0

Что * Не работает * об этом? Какие результаты вы получаете вместо этого? –

+0

он будет работать, если вы установили uri.Port = -1; // покупка по умолчанию будет 80 портов, вам нужен порт протокола по умолчанию. –

ответ

1

Я вижу проблему сейчас: я использовал

return Redirect(url); 

но это действие называется из Ajax (моя ошибка не помню), так что правильное решение использует:

return JavaScript("window.location = '" + url + "'"); 
1

Вы можете отметить свое действие с RequireHttps атрибутом. И ваша ссылка будет автоматической перенаправлена ​​на HTTPS

public class AccountController:Controller 
{ 
    [RequireHttps] 
    public ActionResult Login() 
    { 
     ... 
    } 
} 

Вы можете перенаправить на это действие из кода - RedirectToAction.

Кроме того, вы можете проверить следующие темы для дополнительной информации - Redirect HTTP to HTTPS.

+0

Но если я хочу перенаправить внешний URL на другой домен? –

+0

Это не ваш код? гектометр Возможно ли, что сервер назначения перенаправляет вас на http? – RredCat

+0

Это мое, но я до сих пор не могу узнать, как добраться до внешнего URL. Если я использую RedirectToAction (A) (и действие «A», отмеченное [RequireHttps]), которое находится рядом с моим действием, я не могу получить это действие «A». Он становится невидимым для mvc. –

2

Ну Я наткнулся на ту же проблему: у меня есть сайт MVC, работающий под https, и у меня есть некоторые ситуации, когда мне нужно перенаправить на какой-то внешний url, который я получаю в качестве параметра, и когда этот URL-адрес является http URL - говорят http://www.somethingontheweb.com - прямолинейный

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

фактически не работает, потому что после того, как все это выглядит, как это перенаправление на HTTPS: //www.somethingontheweb.com, который не существует вообще обычно.

До сих пор не знаю, почему это работает как это, но я нашел эту работу вокруг: Я прибег к meta refresh

Так у меня есть страница: ~/Views/Shared/DoRedirect. cshtml и вот его код:

@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
<meta http-equiv="refresh" content="0; [email protected]" /> 
<title>redirecting</title> 
</head> 
<body> 
<p>redirecting...</p> 
</body> 
</html> 

, а затем мой код контроллера просто

ViewBag.RedirectUrl = url; 
return View("DoRedirect"); 
Смежные вопросы