我们知道Mvc提供我们想要的功能的扩展,我们简单说说通过扩展Controller,以及ActionFilterAttribute来实现我们想要达到的权限管理内容。
我们来看下面结构:
public class BaseController : Controller { public string User{set;get;} public string Limits {set;get;} /// <summary> /// /// </summary> /// <param name="filterContext"></param> protected override void OnActionExecuting(ActionExecutingContext filterContext) { ///实现我们提供的权限操作 filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { Controller = "Index", action = "Default" })); } }
我们看到通过集成Controller我们可以在运行Controller之前来判断用户操作权限,那么我们可以试想此处的应用场景,如当我们的用户未认证,那么我们可以通过直接判断跳转到认证页面。如采用MVC提供Controller验证过滤。
下面我们在来看:ActionFilterAttribute
1 /// <summary> 2 /// 参数过滤器 3 /// </summary> 4 public class ParamFilter : ActionFilterAttribute 5 { 6 /// <summary> 7 /// 执行Action之前操作 8 /// </summary> 9 /// <param name="filterContext"></param> 10 public override void OnActionExecuting(ActionExecutingContext filterContext) 11 { 12 ///处理Action之前操作内容根据我们提供的规则来定义这部分内容 13 base.OnActionExecuting(filterContext); 14 } 15 16 /// <summary> 17 /// 执行Action之后操作 18 /// </summary> 19 /// <param name="filterContext"></param> 20 public override void OnActionExecuted(ActionExecutedContext filterContext) 21 { 22 base.OnActionExecuted(filterContext); 23 } 24 }
通过扩展我们可以通过自己的应用场景以及内容来完成我们所想要达到的目的。
名称 | 说明 | |
---|---|---|
![]() |
Equals | 基础结构。返回一个值,该值指示此实例是否与指定的对象相等。 (继承自 Attribute。) |
![]() |
Finalize | 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。) |
![]() |
GetHashCode | 返回此实例的哈希代码。 (继承自 Attribute。) |
![]() |
GetType | 获取当前实例的 Type。 (继承自 Object。) |
![]() |
IsDefaultAttribute | 当在派生类中重写时,指示此实例的值是否是派生类的默认值。 (继承自 Attribute。) |
![]() |
Match | 当在派生类中重写时,返回一个指示此实例是否等于指定对象的值。 (继承自 Attribute。) |
![]() |
MemberwiseClone | 创建当前 Object 的浅表副本。 (继承自 Object。) |
![]() |
OnActionExecuted | 在执行操作方法后由 MVC 框架调用。 |
![]() |
OnActionExecuting | 在执行操作方法之前由 MVC 框架调用。 |
![]() |
OnResultExecuted | 在执行操作结果后由 MVC 框架调用。 |
![]() |
OnResultExecuting | 在执行操作结果之前由 MVC 框架调用。 |
![]() |
ToString | 返回表示当前对象的字符串。 (继承自 Object。) |
通常,可通过创建从抽象 FilterAttribute 类继承的特性类,来创建操作筛选器。 某些内置操作筛选器(如 AuthorizeAttribute 和 HandleErrorAttribute)继承自 FilterAttribute 类。 从 FilterAttribute 派生出来的操作筛选器始终在操作方法运行之前调用。
诸如 OutputCacheAttribute 之类的其他操作筛选器将继承抽象 ActionFilterAttribute 类,这使操作筛选器可在操作方法运行之前或之后运行。
可以使用操作筛选器特性来标记任何操作方法或控制器。 如果特性标记控制器,则操作筛选器将应用于该控制器中的所有操作方法。
有关使用特性的更多信息,请参见利用特性扩展元数据。