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]就可以进行验证。

浙公网安备 33010602011771号