2011-06-02 1014 views
0

我在ASP.NET MVC 3应用程序中使用SSL。一旦用户进入HTTPS模式,页面中的所有链接都将使用HTTPS前言生成,但我希望“让用户离开”HTTPS模式,并在重要信息交换已经完成时返回HTTP完成。以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

你怎么能指望网页了解HTTP运行在哪个端口? – 2011-06-02 14:12:53

+0

因为'Request.Url.Port'?正如我所说,该页面在HTTP模式下生成正确端口的链接。 – vtortola 2011-06-02 14:22:45

+1

,但如果请求是通过HTTPS完成的,请求中的端口不同,因此您需要知道http端的哪个端口正在使用。 – 2011-06-02 14:26:25

回答

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); 
+0

你是完全正确的,你的方法很好!我已经添加了一个可选参数来指定协议,所以我可以在https链接中使用它。非常感谢!我非常关注Azure,作为端点配置,我忘了它与MVC路由配置无关。干杯。 – vtortola 2011-06-03 14:14:47