IIS7集成模式与ASP.NET应用程序兼容性

IIS7引入了两种模式:经典模式和集成模式。经典模式与IIS的早期版本兼容,而集成模式则是增强版,支持许多新特性。本文将解释在将ASP.NET应用程序迁移到IIS7的集成模式时可能遇到的“Request is not available in this context”异常。

“Request is not available in this context”异常是在将ASP.NET应用程序迁移到IIS 7.0/7.5的集成模式时可能遇到的一个常见错误。这个异常发生在尝试在global.asax文件中的Application_Start方法实现中访问请求的HttpContext时。错误信息如下:

服务器错误 '/' 应用程序。 请求在此上下文中不可用 描述: 当前Web请求执行期间发生了一个未处理的异常。请查看堆栈跟踪以获取有关错误以及代码中错误起源的更多信息。 异常详细信息: System.Web.HttpException: 请求在此上下文中不可用 源错误: 当前Web请求执行期间生成了一个未处理的异常。可以使用下面的异常堆栈跟踪来识别异常的起源和位置。

在经典模式下,ASP.NET应用程序总是由第一个请求启动,因此可以通过静态HttpContext.Current字段获取请求上下文。但是,由于IIS7集成管道的设计变更,Application_Start事件中请求上下文不可用。

如果希望在Application_Start事件中访问请求上下文,可以选择将应用程序迁移到经典模式(不推荐),或者相应地更改应用程序。

如果选择更改应用程序,首先需要从Application_Start中移除对HttpContext.Current的引用。如果使用HttpContext.Current.Request获取应用程序路径,不需要使用请求,可以使用HttpRuntime.AppDomainAppVirtualPath代替。以下是代码示例:

Response.Write(HttpRuntime.AppDomainAppVirtualPath); Response.Write(HttpContext.Current.Request.ApplicationPath); // 两者将返回相同的结果。 void Application_BeginRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; HttpContext context = application.Context; // 在这里初始化第一次请求... } // 获取上下文,然后执行初始化步骤。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485