获取应用程序path而不使用httpcontext。 (asp.net)

怎么做?

我不想用这个:

HttpContext.Current.Server.MapPath 

有没有类似的function,我可以打电话,而不需要一个httpcontext

例如,如果开始一个线程做一些东西,我不能使用httpcontext,但我仍然需要得到的应用程序的path。 不,我不能将上下文作为parameter passing或从共享variables中读取。

3 Solutions collect form web for “获取应用程序path而不使用httpcontext。 (asp.net)”

使用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 (如果在一台机器上定义了多个域,则会失败)。

  • 最大请求长度超出
  • IIS7caching控制
  • IISExpress从远程计算机返回503错误
  • System.Diagnostics.Process.Start不能从IIS工作
  • 如何从证书和私钥创build.pfx文件?
  • 我刚刚发现为什么所有的ASP.Net网站都很慢,我正在设法解决这个问题
  • 什么是IIS结构下的aspnet_client文件夹?
  • 致命错误:调用未定义的函数oci_connect()
  • 我应该如何在ASP.NET 4中执行长时间运行的任务?
  • Python上的IIS:如何?
  • 如何启动/停止IISExpress服务器?