2013-07-04 233 views
0

我想將頁面重定向到ASPX文件的安全連接。ASP.Net重定向到安全

要求客戶將與foo.com.au相似的URL複製並粘貼到瀏覽器中。

我有下面的代碼隱藏文件的工作這段代碼,但是當它被部署到生產這是否會更新網址有https://wwwwww作爲向客戶提供的網址沒有在它www想知道?

protected override void OnPreInit(EventArgs e) 
    { 
     base.OnPreInit(e); 
     if (!Request.IsLocal && !Request.IsSecureConnection) 
     { 
      string redirectUrl = Request.Url.ToString().Replace("http:", "https:"); 
      Response.Redirect(redirectUrl); 
     } 
    } 

回答

2

而不是使用Request.Url,使用Request.Url.AbsoluteUri。另外,你不應該假定URL將以小寫輸入。我會修改代碼:

if (!Request.IsLocal && !Request.IsSecureConnection) 
{ 
    if (Request.Url.Scheme.Equals(Uri.UriSchemeHttp, StringComparison.InvariantCultureIgnoreCase)) 
    { 
     string sNonSchemeUrl = Request.Url.AbsoluteUri.Substring(Uri.UriSchemeHttp.Length); 
     // Ensure www. is prepended if it is missing 
     if (!sNonSchemeUrl.StartsWith("www", StringComparison.InvariantCultureIgnoreCase)) { 
      sNonSchemeUrl = "www." + sNonSchemeUrl; 
     } 
     string redirectUrl = Uri.UriSchemeHttps + sNonSchemeUrl; 
     Response.Redirect(redirectUrl); 
    } 
} 

如果你這樣做,它會改變的是架構。所以,如果絕對URI是

http://foo.com.au 

將改爲

https://foo.com.au 

最後一個音符:當我們已經這樣做了,我們從來沒有嘗試過在OnPreInit,我們總是在Page_Load中執行此邏輯。我不確定在頁面生命週期的哪一部分會有什麼變化,但如果遇到問題,可以將其移動到Page_Load中。

+0

謝謝,最後的部分是確保'www'被放置在URL(如果它不存在)作爲證書是'https:// www.foo.com.au'而不是'https:// foo.com.au' @competent_tech – ojhawkins

+0

我不是100%確定這是必要的,但它應該是一個直接測試URI以查看它是否以www開頭,如果不是,則添加它。我可以修改答案來表明這一點。 –

+0

@ojhawkins:好的,回答已被修改爲包含www的添加。如果它丟失。 –

0

這是我的最終實現要佔請求通過爲https://foo,而不是https://www.foo

 if (!Request.IsLocal && 
      !Request.Url.AbsoluteUri.StartsWith("https://www.", StringComparison.OrdinalIgnoreCase)) 
     { 
      string translatedUrl; 
      string nonSchemeUrl = Request.Url.AbsoluteUri; 
      string stringToReplace = (Request.Url.Scheme == Uri.UriSchemeHttp ? Uri.UriSchemeHttp + "://" : Uri.UriSchemeHttps + "://"); 
      nonSchemeUrl = nonSchemeUrl.Replace(stringToReplace, string.Empty); 
      if (!nonSchemeUrl.StartsWith("www", StringComparison.InvariantCultureIgnoreCase))nonSchemeUrl = "www." + nonSchemeUrl; 
      translatedUrl = Uri.UriSchemeHttps + "://" + nonSchemeUrl; 
      Response.Redirect(nonSchemeUrl); 
     } 
+0

你永遠不會使用你的變量convertedUrl –