我们正在迁移一个应用程序以使用IIS7集成模式.在设计为在HTTP请求的上下文中工作的库代码中,我们通常使用如下代码:
if (HttpContext.Current != null &&
HttpContext.Current.Request != null) {
// do something with HttpContext.Current.Request
} else {
// do equivalent thing without HttpContext..
}
Run Code Online (Sandbox Code Playgroud)
但是在IIS7集成模式下,HttpContext.Current.Request每次调用此代码时,检查都会抛出异常Application_Start.
protected void Application_Start(object sender, EventArgs e)
{
SomeLibrary.DoSomethingWithHttpContextCurrentDetection();
}
Run Code Online (Sandbox Code Playgroud)
结果是:
System.Web.HttpException:请求在此上下文中不可用
如果不将这些调用包装在异常处理程序中并根据是否生成异常采取操作,如何检测请求是否真的可用.
看着HttpContext在反射我看到它有一个internal bool HideRequestResponse领域,但它的内部,所以我只能得到它与反思,这就是脆弱的.是否有更正式/批准的方式来确定是否可以打电话HttpContext.Request?
这篇关于这个主题的博客文章说不使用HttpContext,但是如何在通用库代码中确定它是否可以使用HttpContext?
我正在使用那里提到的解决方法Application_BeginRequest和一个initialized字段只能初始化一次作为其中一部分BeginRequest,但必须在每个调用应用程序中完成,而我更喜欢使库代码更健壮并处理这个情况无论从哪里调用.