• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[asp.net mvc]自定义filter

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

写在前面

最近在摸索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]就可以了。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap