在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
写在前面最近在摸索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]就可以了。 |
请发表评论