2011年2月12日

asp.net 取得專案執行Root的URL

web form任一頁面例如「http://localhost:3586/CarbonPlatform/ZZZ/DefTest.aspx?id=1」
目標取得「http://localhost:3586/CarbonPlatform/」web project的root所在之URL

似乎沒有直接用內建函式取到的方法?

不過若可做出一個extraUrl是「ZZZ/DefTest.aspx」, 便可remove掉取得想要的字串了..
Request.Url.AbsoluteUri
ex.「http://localhost:3586/CarbonPlatform/ZZZ/DefTest.aspx?id=1」
Request.Url.AbsoluteUri.IndexOf(extraUrl)
ex.「37」
Request.Url.AbsoluteUri.Remove(Request.Url.AbsoluteUri.IndexOf(extraUrl))
ex.「http://localhost:3586/CarbonPlatform/」

做出extraUrl的方法:
string extraUrl1 = Request.PhysicalPath.Replace(Request.PhysicalApplicationPath, "").Replace(@"\", "/");
string extraUrl2 = Request.FilePath.Replace(ResolveUrl("~"),"");

首先, 方法1,
Request.PhysicalPath
ex.「D:\Code\CarbonPlatform\WebSites\CarbonPlatform\ZZZ\DefTest.aspx」
Request.PhysicalApplicationPath
ex.「D:\Code\CarbonPlatform\WebSites\CarbonPlatform\」
Request.PhysicalPath.Replace(Request.PhysicalApplicationPath, "").Replace(@"\", "/")
ex.「ZZZ/DefTest.aspx」

不過那個.Replace(@"\", "/")實在感覺不漂亮, 所以最後本宅犬個人是採方法2

相關用到的
Request.Url.PathAndQuery
ex.「/CarbonPlatform/ZZZ/DefTest.aspx?id=1」
Request.FilePath
ex.「/CarbonPlatform/ZZZ/DefTest.aspx」
ResolveUrl("~")
ex.「/CarbonPlatform/」
Request.Url.PathAndQuery.Replace(ResolveUrl("~"),"")
ex.「ZZZ/DefTest.aspx?id=1」
Request.FilePath.Replace(ResolveUrl("~"),"")
ex.「ZZZ/DefTest.aspx」

最後
public static string GetProjectRootUrl()
{
string extraUrl = _page.Request.FilePath.Replace(_page.ResolveUrl("~"), "");
string prjRootUrl = _page.Request.Url.AbsoluteUri.Remove(_page.Request.Url.AbsoluteUri.IndexOf(extraUrl));
return prjRootUrl;
}


2012/1/3 已有新修改


http://ir1n1.blogspot.com/2012/01/aspnet-rooturl.html

沒有留言: