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

MaY*_*YaN 7 asp.net iis asp.net-mvc iis-7

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

var virtualPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)
                          + HttpRuntime.AppDomainAppVirtualPath;
Run Code Online (Sandbox Code Playgroud)

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

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

var pageToHit = virtualPath + Pages\MyOtherPage.aspx 
var client = new WebClient();
client.DownloadData(dummyPageUrl);
Run Code Online (Sandbox Code Playgroud)

当我在IIS 6或Visual Studio内置Web服务器中运行项目时,所有这一切都很好,但是当我得到"System.Web.HttpException:请求在此上下文中不可用"时,IIS 7中的事情变得疯狂.

我知道这个帖子:请求在此上下文中不可用

但是,我想知道是否有人知道如何在不改变项目的情况下执行上述操作以在经典模式下运行.

Dar*_*rov 5

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

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