2013-12-16 59 views
1

我的網站有一個公共區域,通過http和https部分訪問需要登錄。登錄時,它重定向到http公共索引頁面。UriBuilder指向本地主機而不是域名

此前我已經完成了這個工作,並指出了完整的網址。最近我不得不擺脫這樣的事情,因此該網站可以在衆多領域運行,進行測試。

我嘗試使用UriBuilder將https鏈接轉換爲http鏈接,以便網站不再需要使用直接指向特定網址的鏈接。這應該允許網站使用任何域名。現在它指向計算機名稱。

if (Request.IsSecureConnection) 
{ 
    UriBuilder ub = new UriBuilder(); 
    ub.Path = "/html/index.html"; 
    ub.Scheme = Uri.UriSchemeHttp; 
    ub.Port = -1; // use default port for scheme 
    Response.Redirect(ub.Uri.ToString(), true); 

    //An old direct link to the site 
    //Response.Redirect("http://www.someaddress.com/html/index.html"); 
} 

當代碼遠程觸發在測試服務器上,而不是指向正確的域返回我的地址

http://localhost/html/index.html 

代替

http://testserver/html/index.html 

我不知道爲什麼它這樣做而不是返回我通過連接到服務器的地址。

回答

0

如果您未指定主機(默認主機("localhost"))將被使用 - 請參閱MSDN上的UriBuilder() constructor文章。

修復:指定主機(可能基於傳入請求的主機)。

ub.Host = GetMeIncomingHost(); 
0

因爲在URI到你重定向,你有沒有指定的權威(主機)。因此,您的重定向發送302 Found HTTP狀態和響應包含location:頭,看起來像這樣的事情:

location: /html/index.html 

這是一個相對 URI,相對於從重定向請求發起當前URI。這意味着它繼承了請求頁面(這很明顯,你的情況,是一個http://localhost:xx/...的方案和授權組成

爲了解決這個問題,有HttpContext.Current.Request.Url種子您UriBuilder在其構造應約做到這一點:。

UriBuilder ub = new UriBuilder(HttpContext.Current.Request.Url); 
ub.Path = "/html/index.html"; 
Response.Redirect(ub.Uri.ToString(), true); 
相關問題