不使用 httpcontext 获取应用程序路径。 (asp.net)

发布于 2024-08-24 15:10:15 字数 223 浏览 11 评论 0原文

怎么做呢?

我不想使用这个:

HttpContext.Current.Server.MapPath

是否有一个类似的函数,我可以在不需要 httpcontext 的情况下调用?

例如,如果启动一个线程做一些事情,我无法使用 httpcontext,但我仍然需要获取应用程序的路径。不,我不能将上下文作为参数传递或从共享变量中读取它。

How to do it?

I don't want to use this:

HttpContext.Current.Server.MapPath

Is there a similar function that I can call without requiring a httpcontext?

For example if a start a thread doing some stuff i cant use the httpcontext, but i still need to get the path of the app. And no i can't pass the context as an argument or read it from a shared var.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

独留℉清风醉 2024-08-31 15:10:15

有多个选项:

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

我建议使用AppDomain.CurrentDomain.BaseDirectory,因为它可以在任何类型的项目中使用,并且可以设置。

例如,您可以通过命令将 UnitTest BaseDirectory 设置为将 Web 根文件夹指向 AppDomain.CurrentDomain.BaseDirectory:

AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");

There are several options:

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

I would recommend to use AppDomain.CurrentDomain.BaseDirectory, because it can be used in any type of project and it can be set up.

You can for example set UnitTest BaseDirectory to point your web root folder the AppDomain.CurrentDomain.BaseDirectory by command:

AppDomain.CurrentDomain.SetData("APPBASE", "path to your web root");
沉睡月亮 2024-08-31 15:10:15

在寻找计算 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
   );
}

该函数返回完整的虚拟路径,例如:http://full-host-name/AppName。当然,也有一些限制:硬编码协议(http、https 等)以及使用 主机名 而不是域名(如果多个域会失败)是在一台机器上定义的)。

I have run across this question when looking for way to compute an URL (permalinks in the Web application) to provide in some e-mail notifications.

These were generated on another thread, so HttpContext was not available and I wanted to avoid putting URL related information in the queue table used to generate the e-mails.

The code:

public static String GetCurrentAppDomainBasePath(String prefix = "http://")
{
   return String.Format("{0}{1}{2}", 
      prefix,
      System.Net.Dns.GetHostEntry("").HostName, 
      System.Web.HttpRuntime.AppDomainAppVirtualPath
   );
}

The function returns the full virtual path like: http://full-host-name/AppName. Of course, there are some limitations: hardcoded protocol (http, https etc.) and using hostname instead of domain name (fails if multiple domains are defined on a single machine).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文