asp.net MVC 特性(Attributes)的简单应用--帅选器特性

1.[ASP.NET MVC 小牛之路]02 - C#知识点提要 里面有简单说明

2.声明一个类是一个特性(Attributes),必须在类前面加上[AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=false,Inherited=true)]

  AttributeTargets是一个枚举类型(MSDN描述),其中有Class、Method、Field(属性)、Property(字段)等等。

  AllowMultiple:获取或设置一个布尔值,该值指示能否为一个程序元素指定多个指示属性实例。

  Inherited:获取或设置一个布尔值,该值指示指示的属性能否由派生类和重写成员继承。

2.帅选器特性,主要应用于类((AttributeTargets.Class)、方法(AttributeTargets.Method),

  FilterAttribute 是各类筛选器的基类

  ActionFilterAttribute 这是实现action的筛选的抽象类

  AuthorizeAttribute 这是实现用户身份验证的特性类

  HandleErrorAttribute 这是处理异常的特性类,

下面我们主要看ActionFilterAttribute,它有4个方法,如下:

        // 摘要:
        //     在执行操作方法后由 ASP.NET MVC 框架调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文。
        public virtual void OnActionExecuted(ActionExecutedContext filterContext);
        //
        // 摘要:
        //     在执行操作方法之前由 ASP.NET MVC 框架调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文。
        public virtual void OnActionExecuting(ActionExecutingContext filterContext);
        //
        // 摘要:
        //     在执行操作结果后由 ASP.NET MVC 框架调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文。
        public virtual void OnResultExecuted(ResultExecutedContext filterContext);
        //
        // 摘要:
        //     在执行操作结果之前由 ASP.NET MVC 框架调用。
        //
        // 参数:
        //   filterContext:
        //     筛选器上下文。
        public virtual void OnResultExecuting(ResultExecutingContext filterContext);

 有了这个,我们可以把一些相同的操作,和类或者方法相关的,写成帅选器特征。例如购物网站购物时需要进行的登录验证,那么我们就可以重写这个OnActionExecuting方法。如下是demo:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Filter
{
    /// <summary>
    /// 验证是否登录
    /// </summary>
    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=false,Inherited=true)]
    public sealed class AuthAttribute : ActionFilterAttribute
    {
        /// <summary>
        /// 重写OnActionExecuting方法,在执行操作方法之前由 ASP.NET MVC 框架调用。
        /// </summary>
        /// <param name="filterContext">控制器上下文</param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var controller = filterContext.Controller as Controller;
            if (filterContext.HttpContext.Session["UserName"]==null||string.IsNullOrWhiteSpace(filterContext.HttpContext.Session["UserName"].ToString()))
            {
                //如果用户没登录或者登录过时则会跳到主页(实际逻辑应该跳到登录页)
                filterContext.Result = new RedirectResult("~/Home/Login");
            }
            //base.OnActionExecuting(filterContext);
        }
    }
}

然后我们在类或者方法前面引用[Auth]就可以进行验证。

posted @ 2017-01-25 21:20  花生打代码会头痛  阅读(191)  评论(0)    收藏  举报