zoukankan      html  css  js  c++  java
  • MVC4方法行为过滤器例子(用户登录)

    在Model文件夹下添加一个类MyActionFilterAttribute继承于ActionFilterAttribute:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcValidateDemo.Models
    {
        //AllowMultiple = true:允许多个标签同时都起作用
        [AttributeUsage(AttributeTargets.All,AllowMultiple = true)]
        public class MyActionFilterAttribute : ActionFilterAttribute
        {
            public string Name { get; set; }
            //Action执行之前先执行此方法
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                base.OnActionExecuting(filterContext);
                //HttpContext.Current.Response.Write("<br />执行OnActionExecuting方法:" + Name);
                //例子:获取session值,找不到则跳转页面
                string session = HttpContext.Current.Session["user"] == null ? string.Empty : HttpContext.Current.Session["user"].ToString();
                if (string.IsNullOrEmpty(session))
                {
                    HttpContext.Current.Response.Redirect("/Home/About");
                    return;
                }
            }
    
            //Action执行之后
            public override void OnActionExecuted(ActionExecutedContext filterContext)
            {
                base.OnActionExecuted(filterContext);
                HttpContext.Current.Response.Write("<br />执行OnActionExecuted方法:" + Name);
            }
    
            //ActionResult执行之前先执行此方法,返回结果前执行方法
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                base.OnResultExecuting(filterContext);
                HttpContext.Current.Response.Write("<br />执行OnResultExecuting方法:" + Name);
            }
    
            //返回结果后执行方法
            public override void OnResultExecuted(ResultExecutedContext filterContext)
            {
                base.OnResultExecuted(filterContext);
                HttpContext.Current.Response.Write("<br />执行OnResultExecuted方法:" + Name);
            }
        }
    }

    添加一个控制器:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using MvcValidateDemo.Models;
    
    namespace MvcValidateDemo.Controllers
    {
        //[MyActionFilter(Name = "HomeController")]  //过滤控制器
        public class HomeController : Controller
        {
            //[MyActionFilter(Name = "Index Action")] //过滤Action
            [MyActionFilter]
            public ActionResult Index()
            {
                //Response.Write("<p>Action执行了</p>");
                //return Content("<br />ok:视图被渲染<br />");
                return View();
            }
    
            public ActionResult Login()
            {
                Session["user"] = "user";
                return Content("登录成功");
            }
    
            public ActionResult About()
            {
                return View();
            }
    
        }
    }

    当执行Home下Index尝试登录时,会先去执行过滤器的OnActionExecuting方法,过滤器会先判断是否有Session值,如果没找到则跳转页面到/Home/About,当先登录执行/Home/Login时,会将Session值放到服务器中,再次执行/Home/Index则不会跳转

  • 相关阅读:
    二柱子四则运算程序
    测绘软件使用感受
    二分图的最大匹配、完美匹配和匈牙利算法(转载)
    serialVersionUID的用处(转载)
    RMQ(模板)
    codeforces 825E
    红黑树
    SQL 范式(转载)
    java 移位运算
    [Hnoi2010]Bounce 弹飞绵羊
  • 原文地址:https://www.cnblogs.com/genesis/p/5222869.html
Copyright © 2011-2022 走看看