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程序设计有所帮助。