MVC4 基础篇 通过Controller,ActionFilterAttribute处理权限问题

 

  我们知道Mvc提供我们想要的功能的扩展,我们简单说说通过扩展Controller,以及ActionFilterAttribute来实现我们想要达到的权限管理内容。

我们来看下面结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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     }
复制代码

通过扩展我们可以通过自己的应用场景以及内容来完成我们所想要达到的目的。

 

通常,可通过创建从抽象 FilterAttribute 类继承的特性类,来创建操作筛选器。  某些内置操作筛选器(如 AuthorizeAttributeHandleErrorAttribute)继承自 FilterAttribute 类。  FilterAttribute 派生出来的操作筛选器始终在操作方法运行之前调用。 

诸如 OutputCacheAttribute 之类的其他操作筛选器将继承抽象 ActionFilterAttribute 类,这使操作筛选器可在操作方法运行之前或之后运行。

可以使用操作筛选器特性来标记任何操作方法或控制器。  如果特性标记控制器,则操作筛选器将应用于该控制器中的所有操作方法。 

有关使用特性的更多信息,请参见利用特性扩展元数据

 

 

 

posted @   真有意思  阅读(3525)  评论(8编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示