[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]就可以了。

posted @   wolfy  阅读(677)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示