MVC 过滤器 构建会员是否登录
使用环境:在后台管理或者前台有会员中心的情况下使用
使用方式:这是一个用户中心的控制器 我给用户中心主页增加一个特性
[AccountFilter]这是一个过滤器的名字
public class AccountController : Controller { [AccountFilter] public ActionResult Index() { return View(); } }
过滤器具体代码如下
namespace FytMsys.Helper { /// <summary> /// 前台用户登录过滤器 /// </summary> [AttributeUsage(AttributeTargets.All, AllowMultiple = true)] public class AccountFilterAttribute : ActionFilterAttribute { public string Message { get; set; } FilterContextInfo _fcinfo; // OnActionExecuted 在执行操作方法后由 ASP.NET MVC 框架调用。 // OnActionExecuting 在执行操作方法之前由 ASP.NET MVC 框架调用。 // OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。 // OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。 /// <summary> /// 在执行操作方法之前由 ASP.NET MVC 框架调用。 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { _fcinfo = new FilterContextInfo(filterContext); if (UtilsHelper.GetCookie("DDHUSER") == "") { filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { Controller = "Users", action = "Login" })); } } /// <summary> /// 在执行操作方法后由 ASP.NET MVC 框架调用。 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext); } /// <summary> /// OnResultExecuted 在执行操作结果后由 ASP.NET MVC 框架调用。 /// </summary> /// <param name="filterContext"></param> public override void OnResultExecuted(ResultExecutedContext filterContext) { base.OnResultExecuted(filterContext); } /// <summary> /// OnResultExecuting 在执行操作结果之前由 ASP.NET MVC 框架调用。 /// </summary> /// <param name="filterContext"></param> public override void OnResultExecuting(ResultExecutingContext filterContext) { base.OnResultExecuting(filterContext); } public class FilterContextInfo { public FilterContextInfo(ActionExecutingContext filterContext) { #region 获取链接中的字符 // 获取域名 if (filterContext.HttpContext.Request.Url != null) DomainName = filterContext.HttpContext.Request.Url.Authority; //获取模块名称 // module = filterContext.HttpContext.Request.Url.Segments[1].Replace('/', ' ').Trim(); //获取 controllerName 名称 ControllerName = filterContext.RouteData.Values["controller"].ToString(); //获取ACTION 名称 ActionName = filterContext.RouteData.Values["action"].ToString(); #endregion } /// <summary> /// 获取域名 /// </summary> public string DomainName { get; set; } /// <summary> /// 获取模块名称 /// </summary> public string Module { get; set; } /// <summary> /// 获取 controllerName 名称 /// </summary> public string ControllerName { get; set; } /// <summary> /// 获取ACTION 名称 /// </summary> public string ActionName { get; set; } } } }
我使用了OnActionExecuting重写方法,意思是在执行方法之前就调用这个过滤器
判断用户是否登录,如果未登录,直接跳转到登录页面去
是不是很简单, 不知道安全性怎么样,我也是第一次用
欢迎大神指正
ASP.NET MVC交流群:86594082 欢迎你的到来