获取应用程序path而不使用httpcontext。 (asp.net)
怎么做?
我不想用这个:
HttpContext.Current.Server.MapPath
有没有类似的function,我可以打电话,而不需要一个httpcontext?
例如,如果开始一个线程做一些东西,我不能使用httpcontext,但我仍然需要得到的应用程序的path。 不,我不能将上下文作为parameter passing或从共享variables中读取。
使用HttpRuntime.AppDomainAppPath
属性。
有几个选项:
HttpRuntime.AppDomainAppPath
WebApplication -> Web root folder UnitTest -> ArgumentNullException ConsoleApplication -> ArgumentNullException
AppDomain.CurrentDomain.BaseDirectory
WebApplication -> Web root folder UnitTest -> ...\AppDir\bin\Debug ConsoleApplication -> ...\AppDir\bin\Debug
HostingEnvironment.ApplicationPhysicalPath
WebApplication -> Web root folder UnitTest -> null ConsoleApplication -> null
我build议使用AppDomain.CurrentDomain.BaseDirectory,因为它可以在任何types的项目中使用,并且可以进行设置。
例如,您可以将UnitTest BaseDirectory设置为通过命令指向您的Web根文件夹AppDomain.CurrentDomain.BaseDirectory:
AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");
在寻找计算URL(永久链接在Web应用程序中)的方式来提供某些电子邮件通知时,我遇到了这个问题。
这些在另一个线程上生成,所以HttpContext
不可用,我想避免在用于生成电子邮件的队列表中放入与URL相关的信息。
代码:
public static String GetCurrentAppDomainBasePath(String prefix = "http://") { return String.Format("{0}{1}{2}", prefix, System.Net.Dns.GetHostEntry("").HostName, System.Web.HttpRuntime.AppDomainAppVirtualPath ); }
该函数返回完整的虚拟path,如: http://full-host-name/AppName
。 当然,还有一些限制:硬编码协议( http
,https等)和使用hostname
而不是domain name
(如果在一台机器上定义了多个域,则会失败)。