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

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

4

1 回答 1

5

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

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