HttpHandler中无法使用Session(context.Session 为Null)
一.问题描述:
最近需要做一个对特定请求(.report)进行响应的接口,当然是使用实现IHttpHandler来进行处理,实现IHttpHandler接口就必须要实现它的两个方法,ProcessRequest(HttpContext context) 和IsRunable() ,看到在ProcessRequest(HttpContext context) 中有个HttpContext的输入参数,以为通过这个就可以对所有的服务器对象进行使用。不过问题出现了,在这个自定义HTTP响应处理类中,对于Request和Response都可以通过使用HttpContext来引用使用,不过Session 就是不行,总是出现对象未进行引用的错误!
二.解决办法:
通过上网查资料,却无意中发现在自定义HTTPHANDLER中使用SESSION 的方法!
1、先引用System.Web.SessionState这个命名空间,
2、如果是要在HttpHandler中读取Session的内容,就要在实现IHttpHandler的类中同时实现IReadOnlySessionState这个接口。
3、如果是要在HttpHandler中读写Session的内容,就要在实现IHttpHandler的类中同时实现IRequiresSessionState 这样就可以在自定义的HttpHandler 中正常的使用Session了。
三.代码演示:
1.前台页面cs文件
public partial class TestPage: System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnUpLoad_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.Load(TemplateUpload.FileContent);
Session["upLoadXmlDoc"] = doc;
string url = "test.report";
Response.Redirect(url);
}
}
2.实现IHttpHandler的HttpHandler类,用来处理test.report
public class myHttpHandler:IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
String className = businessConfig.Business[context.Request.Path];
//本行将报错,提示:Object reference not set to an instance of an object.
//添加监视,得知context.Session为null
XmlDocument doc = context.Session["upLoadXmlDoc"]
}
// Override the IsReusable property.
public bool IsReusable
{
get { return true; }
}
}
3.解决办法:
让myHttpHandler再实现IRequiresSessionState就ok了
public class myHttpHandler:IHttpHandler,IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
String className = businessConfig.Business[context.Request.Path];
XmlDocument doc = context.Session["upLoadXmlDoc"];
}
// Override the IsReusable property.
public bool IsReusable
{
get { return true; }
}
}
HttpHandler中无法使用Session(context.Session 为Null)的更多相关文章
- abp项目中无法使用HttpContext.Current.Session[""]的问题
web项目Global.asax.cs中加入如下代码 public override void Init() { this.PostAuthenticateRequest += (sender, e) ...
- ashx页面中context.Session["xxx"]获取不到值的解决办法
在 aspx和aspx.cs中,都是以Session["xxx"]="aaa"和aaa=Session["xxx"].ToString()进 ...
- eclipse 中离线安装activiti插件,报错“An error occurred while collecting items to be installed session context was:(...”
eclipse 中离线安装activiti插件,报错“An error occurred while collecting items to be installed session context ...
- 在ASP.Net MVC 中如何实现跨越Session的分布式TempData
Hi,guys!Long time no see! 1.问题的引出 我相信大家在项目中都使用过TempData,TempData是一个字典集合,一般用于两个请求之间临时缓存数据或者页面之间传递消息.也 ...
- 分布式中使用Redis实现Session共享(二)
上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...
- 程序中的Cookie 和Session
这几天回家休息后,想想放假之前的几天,主要看的一些工作上的东西,发现对Session和Cookie这两个东西,我还是很陌生.恩,趁着有网,看了点相关的资料,打算整理下.一翻博客,发现已经有前辈已经对这 ...
- context.Session[“xxx”]详解
1.在aspx和aspx.cs中,都是以Session[“xxx”]=”aaa”和aaa=Session[“xxx”].ToString()进行读写.而在ashx中,Session都要使用contex ...
- [转]分布式中使用Redis实现Session共享(二)
本文转自:http://www.cnblogs.com/yanweidie/p/4678095.html 上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见 ...
- (转)分布式中使用Redis实现Session共享(二)
上一篇介绍了一些redis的安装及使用步骤,本篇开始将介绍redis的实际应用场景,先从最常见的session开始,刚好也重新学习一遍session的实现原理.在阅读之前假设你已经会使用nginx+i ...
随机推荐
- jquery.query.js 插件的用法
转载自:http://www.cnblogs.com/dachie/archive/2010/09/16/1827840.html 代码如下: var url = location.search; & ...
- splunk rest api search
如下: curl -u admin:changeme -k https://localhost:8089/services/search/jobs -d search="search sou ...
- [示例]NSDictionary编程题-字典的排序应用(iOS7班)
代码: #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepo ...
- CCocos2Dx 一段遍历子节点的代码
CCLog("Lein will hide account!CS_FAST_REGISTER_REQ"); <p> CCNode* child1 = (CCNode*) ...
- elasticsearch插件之一:kibana
介绍: 要说kibana,就不得不先说一下logstash.这里呢,先要讲个故事.故事是开头是这样的,Logstash早期曾经自带了一个特别简单的logstash-web用来查看ES中的数据,其功能太 ...
- 设置groupBox背景透明
步骤:属性-BackColor-WEB面板-Transparent
- 向量和矩阵的范数及MATLAB调用函数
范数就是长度的一种推广形式,数学语言叫一种度量.比如有一个平面向量,有两个分量来描述:横坐标和纵坐标.向量的二范数就是欧几里得意义下的这个向量的长度.还有一些诸如极大值范数,就是横坐标或者纵坐标的最大 ...
- APC to USB
from :http://www.allpinouts.org/index.php/APC_USB_cable_schematic connector or cable wiring APC part ...
- checkbox的全选、反选、删除(MainActivity)
package com.example.ay; import java.util.ArrayList;import java.util.List; import com.example.adapter ...
- JS小问题总结
1. 超链接中href=#与href=javascript:void(0) 的区别 #包含了一个位置信息.默认的锚是#top 也就是网页的上端:而javascript:void(0) 仅仅表示一 ...