MVC 过滤器 构建会员是否登录

使用环境:在后台管理或者前台有会员中心的情况下使用

使用方式:这是一个用户中心的控制器 我给用户中心主页增加一个特性

[AccountFilter]这是一个过滤器的名字


public class AccountController : Controller
    {
        [AccountFilter]
        public ActionResult Index()
        {
            return View();
        }
    }

过滤器具体代码如下

namespace FytMsys.Helper
{
    /// <summary>
    /// 前台用户登录过滤器
    /// </summary>
    [AttributeUsage(AttributeTargets.All, AllowMultiple = true)]
    public class AccountFilterAttribute : ActionFilterAttribute
    {
        public string Message { get; set; }
        FilterContextInfo _fcinfo;
        // OnActionExecuted 在执行操作方法后由 ASP.NET MVC 框架调用。
        // OnActionExecuting 在执行操作方法之前由 ASP.NET MVC 框架调用。
        // OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
        // OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。
        /// <summary>
        /// 在执行操作方法之前由 ASP.NET MVC 框架调用。
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            _fcinfo = new FilterContextInfo(filterContext);
            if (UtilsHelper.GetCookie("DDHUSER") == "")
            {
                filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { Controller = "Users", action = "Login" }));
            }
        }

        /// <summary>
        /// 在执行操作方法后由 ASP.NET MVC 框架调用。
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {

            base.OnActionExecuted(filterContext);
        }

        /// <summary>
        ///  OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            base.OnResultExecuted(filterContext);
        }
        /// <summary>
        /// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            base.OnResultExecuting(filterContext);
        }
        public class FilterContextInfo
        {
            public FilterContextInfo(ActionExecutingContext filterContext)
            {
                #region 获取链接中的字符
                // 获取域名
                if (filterContext.HttpContext.Request.Url != null)
                    DomainName = filterContext.HttpContext.Request.Url.Authority;

                //获取模块名称
                //  module = filterContext.HttpContext.Request.Url.Segments[1].Replace('/', ' ').Trim();

                //获取 controllerName 名称
                ControllerName = filterContext.RouteData.Values["controller"].ToString();

                //获取ACTION 名称
                ActionName = filterContext.RouteData.Values["action"].ToString();

                #endregion
            }

            /// <summary>
            /// 获取域名
            /// </summary>
            public string DomainName { get; set; }

            /// <summary>
            /// 获取模块名称
            /// </summary>
            public string Module { get; set; }
            /// <summary>
            /// 获取 controllerName 名称
            /// </summary>
            public string ControllerName { get; set; }
            /// <summary>
            /// 获取ACTION 名称
            /// </summary>
            public string ActionName { get; set; }

        }
    }
}

我使用了OnActionExecuting重写方法,意思是在执行方法之前就调用这个过滤器

判断用户是否登录,如果未登录,直接跳转到登录页面去

是不是很简单, 不知道安全性怎么样,我也是第一次用

欢迎大神指正

ASP.NET MVC交流群:86594082   欢迎你的到来

原文地址:https://www.cnblogs.com/fuyu-blog/p/4605843.html