mvc 基于basecontroller、ActionFilterAttribute及路由的访问登录验证
来源:互联网 发布:大学生淘宝兼职 编辑:程序博客网 时间:2024/06/05 11:35
先看如何定义路由:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); routes.MapRoute( name: "Login", url: "User/Login", defaults: new { controller = "User", action = "Login", id = UrlParameter.Optional } ); routes.MapRoute( name: "BindPhone", url: "User/Reg", defaults: new { controller = "User", action = "Reg", id = UrlParameter.Optional } ); } }
只关注后面两个我自己的路由:
第一个:路由名字是Login,当系统请求使用Login这个路由的时候,就跳到 User/Login这个控制器/动作,
id = UrlParameter.Optional应该是代表携带参数的意思
第二个:路由名字是BindPhone,当系统请求使用BindPhone这个路由的时候,就跳到 User/Reg这个控制器/动作
如果想让整个controller都验证是否登录,同时还有其它控制器属性一起要使用,那么就使用basecontroller这个类:
首先让控制器引用相关的命名空间
using System.Web;using System.Web.Mvc;using System.Web.Routing;然后重写 System.Web.Mvc.ActionFilterAttribute中OnActionExecuting方法:
protected override void OnActionExecuting(ActionExecutingContext filterContext) { if (UserService.SessionUser != null) { if (String.IsNullOrEmpty(UserService.SessionUser.mobile)) { filterContext.Result = new RedirectToRouteResult("BindPhone", new RouteValueDictionary { { "link", Request.Url.ToString() } }); base.OnActionExecuting(filterContext); } } else { filterContext.Result = new RedirectToRouteResult("Login", new RouteValueDictionary { { "link", Request.Url.ToString() } }); base.OnActionExecuting(filterContext); } }
然后让控制器继承这个basecontroller就可以了
另外一种方式:
新建一个类,类继承System.Web.Mvc.ActionFilterAttribute,引用如下命名空间:
using System.Web.Mvc;using HalfBuy.Biz.Service;using System.Web.Routing;using System.Web;
还是重写:
public class CheckLoginAttribute : System.Web.Mvc.ActionFilterAttribute { public bool IsCheck { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { if (!IsCheck) return; if (UserService.SessionUser != null) { var a = UserService.SessionUser; if (String.IsNullOrEmpty(UserService.SessionUser.mobile)) { filterContext.Result = new RedirectToRouteResult("BindPhone", new RouteValueDictionary { { "link", filterContext.HttpContext.Request.Url.ToString()} }); base.OnActionExecuting(filterContext); } } else { filterContext.Result = new RedirectToRouteResult("Login", new RouteValueDictionary { { "link", filterContext.HttpContext.Request.Url.ToString() } }); base.OnActionExecuting(filterContext); } } }注意的是,在这里的重写访问修饰符要用public(原因参考:http://blog.csdn.net/panyanyan/article/details/6574903)
然后在要进行访问控制的控制器或者Action前面加[CheckLoginAttribute(IsCheck=true)]即可
参考:
http://blog.csdn.net/shuaihj/article/details/53020428
http://blog.csdn.net/dv66isme/article/details/52046649过滤器new RouteValueDictionary { { "link", filterContext.HttpContext.Request.Url.ToString() } });
中切勿使用"url",请使用诸如link的关键词,否则与系统的会冲突! 0 0
- mvc 基于basecontroller、ActionFilterAttribute及路由的访问登录验证
- 一个简单的基于MVC模式的登录验证过程
- 基于JSP + servlet + javabean的MVC简单验证登录实例
- mvc继承BaseController实现页面访问权限控制
- MVC——ActionFilterAttribute
- ActionFilterAttribute 用于Action验证
- 基于servlet的登录验证
- 基于Linux路由的访问控制
- 初识ASP.NET MVC窗体验证与权限过滤---2.基于角色的访问控制
- \t\tASP.NET MVC ActionFilterAttribute
- MVC之 自定义过滤器(ActionFilterAttribute)
- MVC下的表单登录验证方式
- 【iOS】BaseController的用处
- BaseController的写法
- BaseController的封装
- 使用MVC模型的用户登录及注册(注册验证)
- 使用MVC模型的用户登录及注册(验证用户是否存在)
- vue之登录路由验证
- Java基础之集合移除元素(Iterator)
- C++ 4种强制类型转换
- cross-compile dbus
- Vijos P1756 数字反转【进制】
- html中使用空格符号
- mvc 基于basecontroller、ActionFilterAttribute及路由的访问登录验证
- ECS的简单使用(windows系统)
- html中使用段落
- Java反射机制详解
- html不换行显示
- 算法/最短路径/Bellman-Ford贝尔曼福特算法
- C++实验5
- Github全面详解-16Team小组
- 服务的基本用法-2