需求:
当活动结束后,我们往往需要将该活动跳转到活动下线的落地页,用以提示用户,而非完全无法访问的状态。
常规处理方式:
对每一个public方法,屏蔽其业务逻辑。这么做的当然可以达到目的,不过过于繁琐,且很容易漏掉部分public方法。
过滤器方式:
过滤器可以针对整个controller及其下的所有action,避免遗漏而导致活动后期数据异常等问题。
具体实现:
//----------------------------------------------------------------------- // <copyright file="OffAttribute.cs" company="SCM"> // 权限控制之1:(属性控制) // @2014 by chaoming. // </copyright> //----------------------------------------------------------------------- using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Common; namespace SCM.Filters { /// <summary> /// 登录验证权限控制过滤器 Created by chaoming,2014-3-31 21:32:22 /// </summary> public class OfflineAttribute : ActionFilterAttribute { /// <summary> /// 活动结束后的跳转地址 /// </summary> string redirecturl; /// <summary> /// 构造器 /// </summary> /// <param name="redirect">跳转地址</param> public OfflineAttribute(string redirect) { this.redirecturl = redirect; } /// <summary> /// 在Action执行前验证,并跳转 Created by chaoming,2014-3-31 21:36:06 /// </summary> /// <param name="filterContext">ActionExcutingContext</param> public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.Result = new RedirectResult(this.redirecturl); } } }
调用也是极其的方便:
/// <summary> /// 十一国庆活动 /// </summary> [Offline(redirect: "http://www.baidu.com")] public class NationalDay16Controller : Controller { }
如此,在活动结束的时候,在controller上加上 Offline 过滤器,即可将所有该活动的请求,跳转到结束提示落地页(此处填写的是百度官网)