feisguan / 待分类 / [asp.net mvc]自定义filter

分享

   

[asp.net mvc]自定义filter

2018-06-27  feisguan

写在前面

最近在摸索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条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>