2009-08-17 45 views

回答

3

谢谢柔滑让我开始。

我已经结束了与

var url = String.Format("https://{0}{1}", 
     Request.ServerVariables["HTTP_HOST"] , 
     ResolveUrl("~/Login.aspx")); 

     Response.Redirect(url); 
+3

请注意,您可以通过以下方式获取主机:this.Request.Url.Host – 2009-08-17 11:25:27

+0

在这种情况下可能最适合DNSSafeHost – 2009-08-17 11:29:33

0

我喜欢从Page_Load中在我想迫使HTTPS的任何页面调用此方法。具体来说,在用户可以输入密码的任何页面上,例如登录,注册和密码重置页面。

protected void ForceHTTPS() 
{ 
    string serverName = Request.ServerVariables["SERVER_NAME"]; 
    string pagePath = Page.AppRelativeVirtualPath.Replace("~", ""); 
    string queryString = Request.Url.Query; 
    if (serverName != "localhost" && !Request.IsSecureConnection) 
    { 
     Response.Redirect("https://" + SECURE_DOMAIN + pagePath + queryString); 
    } 
} 

我使用的原因预定义的SECURE_DOMAIN不变,而不是仅仅读出来的Request.ServerVariables的[“SERVER_NAME”]是,如果有一个我们的SSL证书只能“WWW”。在域名的开头,所以我想确保强制这个域名,以防用户使用不带www的域名浏览网站,或者可能使用了其他域名别名。

而且,如果服务器名称为“localhost”,则不会执行重定向,以便代码在Visual Studio中运行时也可以在我的开发环境中使用。