ASP.NET MVC使用ActionFilterAttribute实现权限限制的方法(附demo源码下载)
本文实例讲述了ASP.NETMVC使用ActionFilterAttribute实现权限限制的方法。分享给大家供大家参考,具体如下:
ActionFilterAttribute是Action过滤类,该属于会在执行一个action之前先执行.而ActionFilterAttribute是MVC的一个专门处理action过滤的类.基于这个原理我们做一个权限限制
例如:如何访问HomeController 里的test action
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Web; usingSystem.Web.Mvc; usingMvcTest.Models; namespaceMvcTest.Controllers { publicclassHomeController:Controller { // //GET:/Home/ publicActionResultIndex() { returnView(); } [AuthorizeFilter] publicActionResulttest() { returnContent("有权访问"); } } }
建立AuthorizeFilterAttribute.cs 内容如下
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Web; usingSystem.Web.Mvc; namespaceMvcTest.Models { ///<summary> ///权限拦截 ///</summary> [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=false)] publicclassAuthorizeFilterAttribute:ActionFilterAttribute { filterContextInfofcinfo; //OnActionExecuted在执行操作方法后由ASP.NETMVC框架调用。 //OnActionExecuting在执行操作方法之前由ASP.NETMVC框架调用。 //OnResultExecuted在执行操作结果后由ASP.NETMVC框架调用。 //OnResultExecuting在执行操作结果之前由ASP.NETMVC框架调用。 ///<summary> ///在执行操作方法之前由ASP.NETMVC框架调用。 ///</summary> ///<paramname="filterContext"></param> publicoverridevoidOnActionExecuting(ActionExecutingContextfilterContext) { fcinfo=newfilterContextInfo(filterContext); //fcinfo.actionName;//获取域名 //fcinfo.controllerName;获取controllerName名称 boolisstate=true; //islogin=false; if(isstate)//如果满足 { //逻辑代码 //filterContext.Result=newHttpUnauthorizedResult();//直接URL输入的页面地址跳转到登陆页 //filterContext.Result=newRedirectResult("http://www.baidu.com");//也可以跳到别的站点 //filterContext.Result=newRedirectToRouteResult(newSystem.Web.Routing.RouteValueDictionary(new{Controller="product",action="Default"})); } else { filterContext.Result=newContentResult{Content=@"抱歉,你不具有当前操作的权限!"};//直接返回returnContent("抱歉,你不具有当前操作的权限!") } } ///<summary> ///在执行操作方法后由ASP.NETMVC框架调用。 ///</summary> ///<paramname="filterContext"></param> publicoverridevoidOnActionExecuted(ActionExecutedContextfilterContext) { base.OnActionExecuted(filterContext); } ///<summary> ///OnResultExecuted在执行操作结果后由ASP.NETMVC框架调用。 ///</summary> ///<paramname="filterContext"></param> publicoverridevoidOnResultExecuted(ResultExecutedContextfilterContext) { base.OnResultExecuted(filterContext); } ///<summary> ///OnResultExecuting在执行操作结果之前由ASP.NETMVC框架调用。 ///</summary> ///<paramname="filterContext"></param> publicoverridevoidOnResultExecuting(ResultExecutingContextfilterContext) { base.OnResultExecuting(filterContext); } } publicclassfilterContextInfo { publicfilterContextInfo(ActionExecutingContextfilterContext) { #region获取链接中的字符 //获取域名 domainName=filterContext.HttpContext.Request.Url.Authority; //获取模块名称 //module=filterContext.HttpContext.Request.Url.Segments[1].Replace('/','').Trim(); //获取controllerName名称 controllerName=filterContext.RouteData.Values["controller"].ToString(); //获取ACTION名称 actionName=filterContext.RouteData.Values["action"].ToString(); #endregion } ///<summary> ///获取域名 ///</summary> publicstringdomainName{get;set;} ///<summary> ///获取模块名称 ///</summary> publicstringmodule{get;set;} ///<summary> ///获取controllerName名称 ///</summary> publicstringcontrollerName{get;set;} ///<summary> ///获取ACTION名称 ///</summary> publicstringactionName{get;set;} } }
完整实例代码点击此处本站下载。
希望本文所述对大家asp.net程序设计有所帮助。