如何从控制器重定向到外部URL?

时间:2013-05-21 08:14:54

标签: c# asp.net-mvc asp.net-mvc-4

ASP.NET MVC 4项目

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

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

它没有用。

我也试过这个:

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

3 个答案:

答案 0 :(得分:2)

我偶然发现了同样的问题:我有一个在 https 下运行的MVC网站,我有一些情况需要重定向到一些外部网址,我接收它作为参数,当这个网址时是一个 http 网址 - 说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; url=@ViewBag.RedirectUrl" />
<title>redirecting</title>
</head>
<body>
<p>redirecting...</p>
</body>
</html>

然后我的Controller代码只是

ViewBag.RedirectUrl = url;
return View("DoRedirect");

答案 1 :(得分:1)

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

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

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

此外,您可以查看下一个帖子以获得一些额外的想法 - Redirect HTTP to HTTPS

答案 2 :(得分:1)

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

return Redirect(url);

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

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