2012-10-02 225 views
1

好的我們大多數人在將它們發佈到生產服務器之前,先在我們的本地主機上開發和測試Asp.NET Web應用程序。但對我來說,本地主機有時候是一種痛苦,因爲我無法正確地獲得絕對路徑。因爲讓我們說我的應用程序位於http://localhost/MyApp/我無法正確獲取主機。我可以通過幾個代碼來獲得它,但是我希望使它更通用,所以無論何時其他開發人員將相同的應用程序放在另一個位置,例如http://localhost/TheirApp,那麼它應該可以正常工作。如何處理Localhost中的相對路徑和絕對路徑

樣本問題:

每當我使用絕對路徑,這樣/aboutus.aspx,它會導致這個http://localhost/aboutus.aspx和省略MyApp。如果我使用相對路徑,那麼它變成http://localhost/MyApp/IamHere.aspx/aboutus.aspx,這是相當令人不安的。

因此,如果Request.Url.AuthorityRequest.Url.Host將返回http://localhost/MyApp那麼我們可以使用這些附加我們的網址,並找到一個很好的解決方案。

的替代解決方案:

我可以這樣做:

if(Request.Url.Host.StartsWith("localhost")) 
{ 
    string[] segments = Request.Url.AbsolutePath.Split("/"); 
    var localHost = Request.Url.Authority + "/" + segments[0]; 
} 

然後我可以使用localHost變量和我的道路追加到它。

但我喜歡瞭解你們是如何處理這樣的問題的?

感謝,

回答

5

我不太清楚你想達到什麼樣的,但你可以使用波浪號(~)指Web應用程序的根目錄,並應解決您的問題。

string url = ResolveUrl("~/aboutus.apsx"); 

的ASP.NET應用程序將找出本身,如果~localhostlocalhost:34534someserver.net/Deep/Path或其他任何東西。

+0

你甚至不需要代字符。使用裸文件名將是當前主機和端口的當前Web應用程序的當前目錄。或者你可以更明確地說同樣的事情./whatever.aspx – chris

+0

如果我哭了?我怎麼總是忘記'〜/':/ – Tarik

0

無論是通過配置參數還是應用程序計算出來,這都是運行良好的應用程序可以在任何主機和任何路徑上工作的工作。找出程序/腳本本身和主機名之間的路徑(位之間)應該不會太困難。在任何情況下,腳本/程序大部分都只能使用相對路徑,網絡服務器會自動爲您添加其他位...因此無需編寫它。