2011-06-02 61 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