获取ASP.Net中的当前应用程序虚拟路径

时间:2012-05-15 15:16:47

标签: asp.net asp.net-mvc iis iis-7

在我的Global.asax.cs的Application_Start中,我试图使用以下方法获取当前的应用程序路径:

var virtualPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)
                          + HttpRuntime.AppDomainAppVirtualPath;

这将返回例如:http://localhost:99/MySite/

然后我将使用此URL并执行以下操作:

var pageToHit = virtualPath + Pages\MyOtherPage.aspx 
var client = new WebClient();
client.DownloadData(dummyPageUrl);

当我在IIS 6或Visual Studio内置Web服务器中运行项目时,所有这一切都很好,但是在IIS 7中出现问题因为我收到“System.Web.HttpException:请求在此上下文中不可用”

我知道这个帖子:Request is not available in this context

但是,我想知道是否有人知道如何在不改变项目的情况下如何进行上述操作。

1 个答案:

答案 0 :(得分:5)

在集成模式下运行时,无法访问Application_Start中当前请求的绝对URL。您可以使用HostingEnvironment.ApplicationVirtualPath访问虚拟路径名,但不能使用绝对URL。这是an article,它解释了一个常见的解决方法。正如文章中所解释的,您有两种可能性:

  1. 将您的应用程序代码更改为不使用请求上下文(推荐)
  2. 使用锁和单例在Application_BeginRequest中执行初始化,以确保在AppDomain的整个生命周期内仅执行一次初始化。这是similar thread讨论第二种方法。