zoukankan      html  css  js  c++  java
  • [asp.net mvc]自定义filter

    写在前面

    最近在摸索mvc,在app中的webview中嵌入h5应用,经常需要用到对cookie的读取操作。所以想到通过自定义的filter截取cookie,然后通过在action上面打特性的方式针对需要认证的action进行授权。

    一个例子

    简单的userInfo类

        public class UserInfo
        {
            public string Name { set; get; }
            public string Pwd { set; get; }
        }

    自定义的filter

        public class CookieAuthAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                //当前action的参数名称
                const string actionParameter = "cookieUser";
                HttpContext context = HttpContext.Current;
                if (filterContext.ActionParameters.ContainsKey(actionParameter))
                {
                    HttpCookie nameCookie = context.Request.Cookies["n"];
                    HttpCookie pwdCookie = context.Request.Cookies["p"];
                    filterContext.ActionParameters[actionParameter] = null;
                    if (nameCookie != null && pwdCookie != null)
                    {
                        filterContext.ActionParameters[actionParameter] = new UserInfo() { Name = nameCookie.Value, Pwd = pwdCookie.Value };
                    }
                }
                base.OnActionExecuting(filterContext);
            }
        }

    注册filter

        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new HandleErrorAttribute());
                filters.Add(new CookieAuthAttribute());
            }
        }
        public class MvcApplication : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
            }
        }

    在需要授权的action上面打特性标记

      public class HomeController : Controller
        {
            // GET: Home
            [CookieAuth]
            public ActionResult Index(UserInfo cookieUser)
            {
                if (cookieUser == null)
                {
                    return new EmptyResult();
                }
                else
                {
                    return View(cookieUser);
                }
            }
            public void Login()
            {
                HttpCookie nameCookie = new HttpCookie("n", "wolfy");
                HttpCookie pwdCookie = new HttpCookie("p", "12321312");
                Response.Cookies.Add(nameCookie);
                Response.Cookies.Add(pwdCookie);
            }
        }

    通过Login写入cookie,然后访问Index

    结果

    这样通过cookie来对要访问的action授权就简单多了,只需在需要认证的action上面打上特性 [CookieAuth]就可以了。

  • 相关阅读:
    解决Linux下Qt程序报『QString::arg: Argument missing: 无法解析SSLv2_client_method中的符号』错误
    中介者模式之我们结婚吧
    POJ 2141 Message Decowding(map)
    Cocos2dx之Box2D具体解释 设置物体回复力
    Android之Window
    opencv源代码分析:cvCreateMTStumpClassifier最优弱分类器的代码框架
    LeetCode总结,二分法一般性总结
    Change Number to English By Reading rule of money
    在多台PC上进行ROS通讯-学习笔记
    编程之美初赛第二场 奇妙的数列
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/5394187.html
Copyright © 2011-2022 走看看