Asp.Net MVC中使用中间件对要访问的页面进行Session判断

一、当我们开发一个网站的时候,会给网站加访问权限,比如:只有登录之后才能去访问某些页面。

  在Asp.Net MVC中提供了两种方法,都是基于AOP的思想诞生的,第一种就是利用C#中的特性,写一个特性标签,然后在特性标签中去做对应的处理,使用时,只需要将特性标签加到对应的方法上即可,就像Python中的装饰器一样。

  第二种方法,使用中间件,相当于一个中间层,比如访问一个网站的页面时,必须先经过中间件进行处理之后才能进行后续的操作,这种方式需要我们写一个控制器的基类,然后让需要进行验证的控制器继承这个中间件控制器基类即可,这样当我们访问这些继承了控制  器中间件的基类的方法时,就必须先执行中间件中的方法,这样就能在中间件中执行一些操作,比如Session校验。

二、这里主要介绍一下第二种中间件的方式

下面是自定义的一个控制器的中间件基类,主要是

public class BaseController : Controller
    {
     ///在ASP.net MVC 中其他的控制器只要继承类这个中间件控制器,那么当访问其中的Action方法时,都会先执行这个方法判断用户是否已经登录
protected override void OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); if(Session["azroad_name"] is null) { filterContext.Result = RedirectToAction("Login", "Login");//跳转到登录的控制器 } else { if((Session["azroad_name"].ToString() != "Azroad")) { filterContext.Result = RedirectToAction("Login", "Login");//跳转到登录的控制器 } } } }

三、控制器中间件的用法

///使用时只需要继承中间件控制器即可
public class SMTController : BaseController
    {
        // GET: SMT
        [HttpGet]
        public ActionResult Index(int id = 1)
        {
            string sql = "STM.FindDataCondition";//分页查询数据
            SmtPage smtpage = new SmtPage();
            SmtPostData postData = GetPostData();
            smtpage.CurrentPage = id;
            smtpage.SmtModels = GetSmtModel(postData,sql);
            smtpage.Count = GetOrderCount(postData);
            return View(smtpage);
        }
}

当访问SMT控制器下的Index方法时,就会自动进行中间件中的判断操作,如果当前服务端没有用户的session存在,那么就会跳转到Login控制器下的Login页面,也就是跳转到登录页面。

原文地址:https://www.cnblogs.com/yuanshuang-club/p/13524857.html