2009-10-19 107 views
2

如果我有一個我需要從當前服務器獲得的相對路徑。以下內容不起作用,因爲它不是有效的URI。如何從當前服務器請求資源(相對路徑)?

var request = WebRequest.Create("\path_to_resource") 

我認爲,最簡單的方法是把路徑在web.config,但是這很容易被忘記,當應用程序移動到另一臺服務器來更新配置打破。有沒有比這更好的方法?

var request = WebRequest.Create(ConfigurationManager.AppSettings["root"] + "\path_to_resource"); 

回答

3

嗯,你總是可以使用類似:

private string CurrentDomain() 
{ 
    string currDomain = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host; 
    if (Request.Url.Port != 80 && Request.Url.Port != 443) 
     currDomain += (":" + Request.Url.Port); 
    return currDomain; 
} 

使用這些不同的Request對象屬性會給你當前的域名上,你可以添加你的子文件夾,你的資源。

Request.Url.Scheme是URL的一部分http/httpsSystem.Uri.SchemeDelimiter://部分,而Request.Url.Host將是你實際的主機名(即example.com)。
如果您的站點在非標準端口上運行,則對Request.Url.Port的調用也會將其添加到URL「域名」中。
請注意,這不是防彈的代碼,因爲它假定您的(例如)運行SSL(HTTPS)的443

如果你需要實際的物理文件路徑,你可以使用Server.MapPath檢索默認端口上您的ASP.NET應用程序的「根」的物理文件路徑,並從那裏追加您的子文件夾。

另請參閱:ASP.NET Web Site Paths

+0

如果應用程序不在域的根目錄下怎麼辦? – Dave 2009-10-19 16:31:58

+0

如果它不在根目錄下,可以使用:Request.ApplicationPath。所以「CurrentDomain()+ Request.ApplicationPath +」/MyPage.aspx「 – spryce 2014-04-30 00:21:42