首页 > 代码库 > 一般处理程序结合反射技术统一执行客户端请求
一般处理程序结合反射技术统一执行客户端请求
思考:
在开发中,如果使用了模板技术+一般处理程序开发,应用中用户的请求可能在程序中都存在一个共性的操作。
例如,每当执行请求时要检查用户是否是登陆,请求时检查用户是否具有相应权限等等的共性的操作,我们不可能每个页面都写上对于操作,那样显然不符合面向对象的思想,存在大量冗余。
如何去解决呢?
解决思路:
- 创建一个父类实现IHttpHandler接口,让处理请求的一般处理程序实现这个接口,当一般处理程序接收到请求时,去统一执行父类里的ProcessRequest()方法。
- 客户端发出的请求,要约定俗成的带上一个action的参数,参数的值就是一般处理程序里要执行的方法。
- 当执行父类的ProcessRequest()方法时,利用反射获取当前一般处理程序的Type,前面说了action的值代表了当前请求执行的操作是什么,那么利用反射找到指定的方法然后执行它。
这样而来,可以让共性的操作在父类里完成,而具体的方法实现在子类里完成
范例代码:
子类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using Blog.Common; 6 namespace Blog.UI.Article_category 7 { 8 /// <summary> 9 /// Handler1 的摘要说明10 /// </summary>11 public class Article_category_Controller : BaseHandler12 {13 14 //方法名都要约定:每个请求名都为action,action的值,都是一般处理程序的方法15 public void list(HttpContext context)16 {17 string output= RazorHelper.RazorParsre("/Article_category/template/Blog_Category.cshtml");18 context.Response.Write(output);19 }20 21 22 23 }24 }
父类
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Reflection; 5 using System.Web; 6 using System.Web.SessionState; 7 namespace Blog.UI 8 { 9 10 11 public class BaseHandler:IHttpHandler,IRequiresSessionState12 {13 14 //一般处理程序会第一个执行 ProcessRequest()方法,它自己没有,会找父类要,让父类统一来执行请求15 public void ProcessRequest(HttpContext context)16 {17 18 /*19 在处理请求操作之前,这里可以处理应用程序要遵循的共性操作20 21 */22 23 24 25 26 //客户端每个请求约定俗成url带上一个参数叫action,action代表该请求执行什么操作27 if (string.IsNullOrEmpty(context.Request["action"]))28 {29 return;30 }31 string action = context.Request["action"];32 33 //调用父类的方法,会是子类handler,利用反射获得类型34 Type ty = this.GetType();35 //根据这个类型,找到和action同名对应的方法,也就是说用action找到当前请求要执行的方法36 MethodInfo method = ty.GetMethod(action);37 if (method!=null)38 {39 method.Invoke(this, new object[] { context }); //context是参数40 return;41 }42 43 44 }45 46 47 48 49 public bool IsReusable50 {51 get52 {53 return false;54 }55 }56 57 58 59 }60 61 62 63 64 }
一般处理程序结合反射技术统一执行客户端请求
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。