MVC

 需求:

           当活动结束后,我们往往需要将该活动跳转到活动下线的落地页,用以提示用户,而非完全无法访问的状态。


常规处理方式:

           对每一个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 过滤器,即可将所有该活动的请求,跳转到结束提示落地页(此处填写的是百度官网)

原文地址:https://www.cnblogs.com/shenchaoming/p/6121637.html