基于IHttpHandler的Ajax封装应用
时间:2011-03-12 来源:yangrong.g
我们知道,传统的ajax请求需要一个具体页面来接收请求,然后在这个页面的后端文件的P代码里根据业务需要写很多的case,例如下面这样:
protected void Page_Load(object sender, EventArgs e)
{
string strYwType = Request.QueryString("YwType");
switch (strYwType)
{
case "A":
//do something
break;
case "B":
//do something
break;
}
}
最近由于一个项目,团队内提出不想通过这种方式做ajax请求的处理,通道文件里面case太多了,阅读和维护都不方便。如是便有了下面这个方案对ajax的请求做了封装,方案的原理是利用IHttpHandler接口和IHttpHandlerFactory接口采用url重写的方式,将请求的页面地址直接映射到业务层的某个具体类上面(注意:实际请求的页面在WEB中不是存在的),例如上面的代码:
我们请求A.aspx页面,则可以直接在业务层添加A这个类来处理case “A”的情况,同理,我们可以请求B.aspx,则在业务层添加B这个类来处理case “B”的情况。注意:实际A.aspx和B.aspx是不存在的。
类关系图如下:
类说明:
AjaxHanle:自定义的HTTP请求处理协定,继承IHttpHandle,下面所有的业务处理都将继承此类,例如AjaxTest类。
AjaxHandleFactory:自定义的HTTP请求工厂。
MappingAttribute:参数属性描述类,用于描述url的参数与类中属性的映射关系,例如下面这样:
[Mapping("name",true)]
public string Name { get; set; }
Mappinger:属性映射,将接收的URL参数映射到相关类上标识为MappingAttribute的属性上。
MappingAttribute类和Mappinger类解决了url中参数的获取的问题的,AjaxHanle和AjaxHandleFactory类解决了请求页面映射到具体类上的问题。
我的例程中的例子是,请求Ajaxtest.aspx,可以直接映射到AjaxTest类上。
源码下载:http://files.cnblogs.com/yangrong/ajaxtest.rar