2011-08-24 92 views
2

我一直在爲ASP.Net應用程序重定向到SSL頁面代碼而苦苦掙扎。我仍然沒有找到一個好的解決方案。問題是,如果我在本地主機上,例如當我正在調試或編碼時,我想讓代碼被禁用,但我無法使其工作。另一個問題是它必須重定向到另一個URL,因此http://www.xx.com應重定向到https://Secure.xxx.com。有任何想法嗎?什麼是在ASP.Net中編碼重定向到SSL頁面的最佳方式

+0

嘗試[http://stackoverflow.com/questions/47089/best-way-in-asp-net-to-force-https-for-an-entire-site][1] [1]:http://stackoverflow.com/questions/47089/best-way-in-asp-net-to-force-https-for-an-entire-site – kervin

回答

5

如果您希望在頁面級別設置ssl屬性,則應該創建一個custom attribute。現在

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)] 
public sealed class HttpsAttribute : Attribute{} 

[HttpsAttribute] 
public partial class PageSecured: YourCustomBasePage {} 

如果attribute設置基本頁面YourCustomBasePage可以檢查:

protected override void OnInit(EventArgs e){ 
    if(!Request.IsSecureConnection){ 
     HttpsAttribute secureAttribute = (HttpsAttribute)Attribute.GetCustomAttribute(GetType(), typeof(HttpsAttribute)); 
     if(secureAttribute != null){ 
     //Build your https://Secure.xxx.com url 
     UriBuilder httpsUrl = new UriBuilder(Request.Url){Scheme = Uri.UriSchemeHttps, Port = 443}; 
     Response.Redirect(httpsUrl.Uri.ToString()); 
     } 
    } 
} 

要重定向到HTTPS排除本地機器,你可以在你的web.config使用配置值。

private bool HTTPSEnabled{ 
    get{ return ConfigurationManager.AppSettings["HTTPSEnabled"] == null || Boolean.Parse(ConfigurationManager.AppSettings["HTTPSEnabled"]); } 
} 

,你檢查添加到第一個條件

if(!Request.IsSecureConnection && HTTPSEnabled) 
1

我用this庫生產。我更喜歡設置屬性,因爲它是配置驅動的,並且可以配置爲良好的級別。這就是說,我不知道它是否可以重定向到一個子域。我甚至不知道爲什麼你會希望發生這種情況。

相關問題