• 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   欢迎你的到来

  • 相关阅读:
    解决:TypeError: object() takes no parameters
    刷题(三)
    刷题(二)
    web自动化流程总结
    不能在Python Console中运行pytest
    关于pytest的一些问题
    UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView
    android系统下消息推送机制
    Android中的动画,选择器,样式和主题的使用
    内存监测工具 DDMS --> Heap
  • 原文地址:https://www.cnblogs.com/fuyu-blog/p/4605843.html
Copyright © 2020-2023  润新知