asp.net mvc自定义特性+过滤器 实现请求时调用自定义方法
来源:互联网 发布:常见的排序算法 编辑:程序博客网 时间:2024/06/06 04:02
一:定义一个特性
[AttributeUsage(AttributeTargets.Method)] //用于方法的特性 public class UniteAttribute : System.Attribute { public string method { get; set; } public string target { get; set; } public UniteAttribute() { } }
二:在需要的方法上配置好该特性
[UniteAttribute(target="Myprice",method="Test")] public ActionResult Login(string LoginName, string Password) { return View(); }
三:建立好类Myprice与方法Test
public class Myprice { public Myprice() { } public void Test(HttpRequestBase _request) { string aa = _request["aa"]; string bb = _request["bb"]; } }
四:使用过滤器获取方法特性,然后用反射调用方法即可
public override void OnActionExecuting(ActionExecutingContext filterContext) { //得到Controller类型 Type t = filterContext.ActionDescriptor.ControllerDescriptor.ControllerType; //得到方法名 string actionname = filterContext.RouteData.Values["action"].ToString(); //获取自定义的特性 object[] astri = GetThatAttribute<UniteAttribute>(actionname, t); if (astri.Length > 0) { //更具自定义的特性得到需要调用的类名与方法名 UniteAttribute u = astri[0] as UniteAttribute; //从配置文件得到名称空间 string sapcename = System.Configuration.ConfigurationManager.AppSettings["UniteNameSapce"].ToString(); string fullname =""; //如果只用类全名就不能调用其他库的方法了,只能调用当前的库下 object libraryName = System.Configuration.ConfigurationManager.AppSettings["UniteLibrary"]; if (libraryName == null) fullname = sapcename + "." + u.target; else fullname = sapcename + "." + u.target + "," + libraryName.ToString(); string methodname = u.method; //反射调用方法,参数为request Type tm = Type.GetType(fullname); object obj = Activator.CreateInstance(tm); Activator.CreateInstance(tm).GetType().GetMethod(methodname).Invoke(obj, new Object[] { filterContext.HttpContext.Request }); } base.OnActionExecuting(filterContext); } public object[] GetThatAttribute<T>(string methodname, Type t) { return t.GetMethod(methodname).GetCustomAttributes(typeof(T), true); } public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext); } }
如果方法需要在action方法执行完后再执行可以在OnActionExecuted方法里边去调用配置的方法
public override void OnActionExecuted(ActionExecutedContext filterContext) { if (bi.isbehind) InvokeWay(bi.filterContext, bi.u); base.OnActionExecuted(filterContext); }
过滤器使用全部过滤器
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); filters.Add(new IsLoginFilter()); filters.Add(new UniteFilter()); } }
也可以在想要的action配置该过滤器
配置好类所有的名称空间与程序集名称,如果程序集名称在本地可以不用配置
<add key="UniteNameSapce" value="YuanJia.LianMeng"/> <add key="UniteLibrary" value="YuanJia"/>
注意过滤器使用的是同一个对象,如果在过滤器使用了全局变量,并发时就会有问题,所以如果需要设置一个参数,可以利用HttpContext.Items,因为每个请求的HttpContext.Items都是不同的对象
filterContext.HttpContext.Items.Add("time", DateTime.Now.ToString()); filterContext.HttpContext.Items.Add("target", u.target); filterContext.HttpContext.Items.Add("method", u.method);
0 0
- asp.net mvc自定义特性+过滤器 实现请求时调用自定义方法
- Asp.net Mvc过滤器获取请求方法自定义特性
- ASP.NET mvc 自定义验证和Filter过滤器传参
- ASP.NET MVC自定义Html辅助方法
- 自定义ASP.NET MVC Html辅助方法
- ASP.NET MVC---自定义HtmlHelper方法
- Asp.net MVC 自定义RouteHandler
- ASP.NET MVC:自定义 Route
- ASP.NET MVC 自定义路由
- Asp.net MVC自定义权限
- Asp.Net MVC自定义HttpHandler
- Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
- asp.net MVC - 小鸟系列之自定义HTML辅助方法
- ASP.NET MVC 2 Authorize - 自定义Authorize的实现
- ASP.NET MVC Authorize - 自定义Authorize的实现
- Asp.net MVC 自定义ViewEngine的简单实现
- spring mvc自定义过滤器filter实现对请求参数编解码的代码
- 初识ASP.NET MVC窗体验证与权限过滤---3.自定义过滤器验证Session超时
- unity数据加密
- 天价学区房 10平叫价300万
- web开发中遇到的问题
- QT5.2.1 Poppler编译
- 关于Oracle中的some/any/all
- asp.net mvc自定义特性+过滤器 实现请求时调用自定义方法
- TortoiseSVN无法编辑日志信息的解决方法 .
- action传list到jsp页面,js接收并解析list(struts2中)
- ubuntu配置NFS,挂载开发板
- ascii表对照
- java 获取当前日期
- Android ListView 多个ItemViewType 导致View类型混乱的解决办法
- PHP模拟守护进程
- LINUX常用命令