下面就是几种获取绝对路径的几种方法
VirtualPathUtilityToAbsolute("~/")
HttpRuntimeAppDomainAppVirtualPath
RequestApplicationPath
PageResolveUrl("~")
以上代码生成的结果如下
当以网站的方式访问时结果如下
VirtualPathUtilityToAbsolute("~/")=/
HttpRuntimeAppDomainAppVirtualPath=/
RequestApplicationPath=/
PageResolveUrl("~")=/
当以虚拟目录()访问时结果如下
VirtualPathUtilityToAbsolute("~/")=/web/
HttpRuntimeAppDomainAppVirtualPath=/web
RequestApplicationPath=/web
PageResolveUrl("~")=/web/
采用第二种和第三种方法还需要做一下处理因为网站访问时是以/结尾而以虚拟目录访问时则是没有/的进行还得进行一次判断稍微麻烦一点
但是这些方法在页面中使用是没有任何问题的但是如果在Global的Application_Start事件里需要得到网站的绝对路径则需要使用前面种方法如果使用第三种方法则会报告如下的错误
Requestisnotavailableinthiscontext
所以只能采取头种方法例如
voidApplication_Start(objectsenderEventArgse)
{
SystemIOStreamWriters=newSystemIOStreamWriter(HttpRuntimeAppDomainAppPath+"logtxt");
sWriteLine(VirtualPathUtilityToAbsolute("~/"));
sWriteLine(HttpRuntimeAppDomainAppVirtualPath);
sClose();
}