一、当我们开发一个网站的时候,会给网站加访问权限,比如:只有登录之后才能去访问某些页面。
在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页面,也就是跳转到登录页面。