2

ASP.NET MVC 4 项目

如何从控制器重定向到来自 HTTP--> HTTPS 的外部 url?我不能只输入:

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

它不起作用。

我也试过这个:

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

3 回答 3

2

好吧,我偶然发现了同样的问题:我有一个在https下运行的 MVC 网站,并且在某些情况下,我需要重定向到作为参数接收的一些外部 url,并且当该 url 是http url 时 - 比如说http:// www.somethingontheweb.com - 直截了当

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

实际上不起作用,因为毕竟看起来这个重定向到https://www.somethingontheweb.com通常根本不存在。

仍然不知道为什么它会这样工作,但我发现了这个解决方法:我已经诉诸 元刷新

所以我有一个页面:~/Views/Shared/DoRedirect.cshtml,这是它的代码:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0; url=@ViewBag.RedirectUrl" />
<title>redirecting</title>
</head>
<body>
<p>redirecting...</p>
</body>
</html>

然后我的控制器代码就是

ViewBag.RedirectUrl = url;
return View("DoRedirect");
于 2014-01-08T09:02:15.680 回答
1

您可以使用RequireHttps属性标记您的操作。您的链接将自动重定向到 https

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

您可以从您的代码重定向到此操作 - RedirectToAction

此外,您可以检查下一个线程以获得一些额外的想法 -将 HTTP 重定向到 HTTPS

于 2013-05-21T08:21:14.717 回答
1

我现在看到一个问题:我用过

return Redirect(url);

但这是从 Ajax 调用的一个动作(我的错误不记得它)所以正确的解决方案是使用:

return JavaScript("window.location = '" + url + "'");
于 2013-05-22T04:21:18.637 回答