zoukankan      html  css  js  c++  java
  • 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   欢迎你的到来

  • 相关阅读:
    线程执行器(一)
    修改锁的公平性
    Spark学习视频整合
    使用读写锁实现同步数据访问
    使用锁实现同步
    使用工厂类创建线程
    线程的分组
    android手机状态解释,比方android.os.Build.VERSION.SDK
    Android-Dalvik指令集
    selenium使用Xpath定位之完整篇
  • 原文地址:https://www.cnblogs.com/fuyu-blog/p/4605843.html
Copyright © 2011-2022 走看看