强制在HTTPS模式下生成HTTP链接

时间:2011-06-02 09:53:29

标签: asp.net-mvc asp.net-mvc-3 https security

我在ASP.NET MVC 3应用程序中使用SSL。一旦用户进入HTTPS模式,页面中的所有链接都将使用HTTPS前言生成,但我想“让用户离开”HTTPS模式,并在已经进行关键信息交换时返回HTTP完成。

路由配置中是否还有其他类似的内容:

/Home/Index will be always HTTP

我试过了:

<a href="@Url.Action("Index","Home",null,"http")">Normal</a>

但是当我使用自定义端口时它失败了。我的意思是,在开头它是:http://127.0.0.1:5104/Home/Index但是当从HTTPS生成链接时,它看起来是http://127.0.0.1/Home/Index,当然它不起作用

问候。

1 个答案:

答案 0 :(得分:1)

当用户正在浏览HTTPS页面时,请求本身不包含有关运行HTTP绑定的端口的任何信息。这意味着您需要自己提供它(有可能以某种方式从IIS配置文件中获取此值)。

下面是一个示例帮助程序函数,它允许您指定请求应路由到哪个http端口。

public static string HttpAction(this UrlHelper helper, string action, 
    string controller, object routeValues, int port)
{
    var url = helper.Action(action, controller, routeValues, "http");
    var uri = new Uri(url);

    var builder = new UriBuilder(uri.Scheme, uri.Host, port, uri.AbsolutePath, uri.Query);
    return builder.ToString();            
}

用法:

@Url.HttpAction("index", "account", new { val = 5 }, 5055);