请求在此上下文中不可用 - >在Global.asax中 - >什么是替代品

时间:2011-10-13 16:48:07

标签: c# asp.net request global-asax

为什么以下行在global.asax中有错误:

string RelativeFilePath = "~/" + (AbsoluteFilePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty)).Replace("\\", "/");  

错误:

  

请求在此上下文中不可用

什么是替代品?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您在IIS7集成管道中托管您的应用程序,则Application_Start中不提供HttpContext对象。对于您的方案,您可以这样做:

string relativeFilePath = "~/" + AbsoluteFilePath
    .Replace(HostingEnvironment.ApplicationPhysicalPath, String.Empty)
    .Replace("\\", "/"); 

答案 1 :(得分:0)

在IIS7或更高版本中,引入了集成管道,并且一些规则已更改。您无法访问Application_Start中的当前HttpContext。 Here's了解更多信息。

引用,这是您的选择:

  

那么,这对你意味着什么?

     

基本上,如果您正好在访问请求上下文中   Application_Start,您有两个选择:

     

将您的应用程序代码更改为不使用请求上下文   (推荐的)。   将应用程序移至经典模式(不推荐)。

由于您只是获取应用程序的物理路径,因此我坚持使用集成模式并只更改您的代码。