2014-01-16 63 views
0

在我的MVC4 Mobile應用程序中,我有註冊,登錄頁面和其餘頁面。我想重定向用戶到HTTPS連接的所有敏感信息頁面,如註冊和登錄頁面和HTTP重新郵寄頁面。將HTTP重定向到MVC4 Mobile應用程序中的HTTPS

+0

[如何將HTTP重定向到MVC應用程序(IIS7.5)的HTTPS](http://stackoverflow.com/questions/4945883/how-to-redirect-http-to-https-of-mvc -application-iis7-5) – SilverlightFox

+0

我想在我的網站中重定向一些頁面。不是所有的網頁或整個網站。 –

回答

0

我更喜歡你使用條件功能把類

public class RequireHttpsConditional : RequireHttpsAttribute 
{ 
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
    { 
     var useSslConfig = ConfigurationManager.AppSettings["UseSSL"]; 
     if (useSslConfig != null) 
     { 
      if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       throw new InvalidOperationException("The requested resource can only be accessed via SSL."); 
      } 

      var request = filterContext.HttpContext.Request; 
      string url = null; 
      int sslPort; 

      if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0) 
      { 
       url = "https://" + request.Url.Host + request.RawUrl; 

       if (sslPort != 443) 
       { 
        var builder = new UriBuilder(url) { Port = sslPort }; 
        url = builder.Uri.ToString(); 
       } 
      } 

      if (sslPort != request.Url.Port) 
      { 
       filterContext.Result = new RedirectResult(url); 
      } 
     } 
    } 
} 

,並使用該[RequireHttpsConditional]上述作用的結果。

我已經得到了這個代碼在互聯網上的某個地方,併爲我工作得很好。

在web.config中的AppSettings使用<add key="UseSSL" value="443" />

,並在上面,你需要把

[RequireHttpsConditional] 
    public ActionResult SignIn() 
{ 
} 

在IIS,你有你的項目點擊右鍵,然後單擊「編輯綁定」,那麼你的操作結果的控制器添加自定義類型https和端口號443(您可以更改它)

注意這隻適用於生產環境。當在本地執行它不會工作。

當你在本地執行它時,你有request.Url.Host,它將只返回你localhost並且缺少你的端口號。所以如果你在MVC中使用它,你會發現你的頁面的錯誤加載頁面,你把這個代碼。

所以這將工作時,你分配主機,而不是使用本地主機與特定的端口號。

+1

乾淨的代碼。謝謝Saurabh –

0

在你希望成爲HTTPS下面的代碼添加到方法的頂部(當然你也可以簡單地將它添加到自己的方法,然後調用它)的控制器操作:

 if (!HttpContext.Request.IsSecureConnection) 
     { 
      var url = new UriBuilder(HttpContext.Request.Url); 

      url.Scheme = "https"; 

      Response.Redirect(url.Uri.AbsoluteUri); 
     } 

它儘管您在整個網站上都保留HTTPS以防止針對auth cookie的MITM attack

+0

當我在我的控制器中使用此代碼時,我的視圖不顯示。 –

+0

什麼顯示呢?你在Firebug(HTTP狀態碼)中得到什麼迴應? – SilverlightFox

+0

它不顯示任何錯誤消息。只顯示前一頁。 –