麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > .NET > 正文

MVC使用Controller代替Filter完成登錄驗證(Session校驗)學習筆記5

2024-07-10 13:31:24
字體:
來源:轉載
供稿:網友

之前的學習中,在對Session校驗完成登錄驗證時,通常使用Filter來處理,方法類似與前文的錯誤日志過濾,即新建Filter類繼承ActionFilterAttribute類,重寫OnActionExecuting方法,之后直接在需要驗證的Action前加上Filter標記即可。

1. 新建登陸校驗類CheckLoginAttribute

using System.Web.Mvc;namespace PMS.WebApp.Models{  public class CheckLoginAttribute:ActionFilterAttribute  {    public override void OnActionExecuting(ActionExecutingContext filterContext)    {      base.OnActionExecuting(filterContext);      if (filterContext.HttpContext.Session == null || filterContext.HttpContext.Session["user"] == null)      {        filterContext.HttpContext.Response.Redirect("/User/Login");      }    }  }}

2. 在需要校驗的Action增加標記以完成校驗

 

using System.Web.Mvc;using PMS.IBLL;using PMS.WebApp.Models;namespace PMS.WebApp.Controllers{  public class UserController : Controller  {    //    // GET: /User/    //private IUserService _userService;    //private IUserService UserService    //{    //  get { return _userService ?? (_userService = new UserService()); }    //  set { _userService = value; }    //}    private IUserService UserService { get; set; }    [CheckLogin]    public ActionResult Index()    {      return Content("OK");    }  }}

注意:不要在RegisterGlobalFilters方法中注冊校驗類,否則則會相當于給所有Action都添加了校驗

這種方法使用起來需要在每個Action方法前添加過濾標簽,且效率并不十分高,我們的項目中使用的是一種更為簡單高效的方法:使用Controller進行登錄驗證

1.  新建一個用于驗證的Controller父類,并在其內重寫OnActionExecuting方法完成登陸校驗:

using System.Web.Mvc;namespace PMS.WebApp.Controllers{  public class FilterController : Controller  {    protected override void OnActionExecuting(ActionExecutingContext filterContext)    {      base.OnActionExecuting(filterContext);      if (Session["user"] == null)      {        //filterContext.HttpContext.Response.Redirect("/User/Login");        filterContext.Result = Redirect("/User/Login");      }    }  }}

在Controller校驗類的OnActionExecuting方法中,有如下代碼

//filterContext.HttpContext.Response.Redirect("/User/Login");
filterContext.Result = Redirect("/User/Login");      

我們使用后者而放棄前者的原因是,ASP.NET MVC中規定,Action必須返回ActionResult,如果使用前者,在完成跳轉前會先進入到請求的頁面,這樣不符合我們使用過濾器的初衷。

2.  然后使需要校驗的Controller繼承于我們定義的校驗Controller即可完成全局登錄校驗操作:

using System.Web.Mvc;using PMS.IBLL;namespace PMS.WebApp.Controllers{  public class UserController : FilterController//Controller  {    //    // GET: /User/    //private IUserService _userService;    //private IUserService UserService    //{    //  get { return _userService ?? (_userService = new UserService()); }    //  set { _userService = value; }    //}    private IUserService UserService { get; set; }    //[CheckLogin]    public ActionResult Index()    {      return Content("OK");    }  }}

下面我們對比兩種方法的優缺點

      Filter定義過程比較復雜,效率也稍低些,但是卻可以對每一個Action進行單獨的過濾,同一Action也可以有多條過濾信息,使用比較靈活。

      Controller定義更為簡便,效率高,但是卻只能對整個Controller中所有方法進行過濾,同一Controller也不太容易有多個Controller過濾父類。

     綜上所述,實際項目中大多需求都是同一Controller下所有方法都需要完成登陸驗證,所以其實使用Controller過濾更為高效,應對復雜需求時,靈活混用兩種方法也不失為一種好的策略。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚州综合一区 | 99精品在线视频观看 | 成人免费看片a | 午夜在线成人 | 国产91久久精品一区二区 | 十级毛片 | av在线观 | 欧美成人a | 性高湖久久久久久久久aaaaa | 最新av网址在线观看 | 日韩黄色免费电影 | 精品一区二区三区日本 | 日韩激情 | 欧美中文字幕在线视频 | 久青草免费视频 | 欧美一级视频免费看 | 最新在线中文字幕 | china对白普通话xxxx | 免费在线观看国产精品 | 国产一区二区三区在线免费观看 | 久久福利剧场 | av免费在线网站 | 国产精品中文在线 | 成人羞羞视频在线观看 | 91精品国产乱码久久桃 | 九九热在线视频免费观看 | 日本欧美在线播放 | 国产1区在线观看 | 日本黄色大片免费 | 久久成人在线观看 | 国产精选在线 | 久久99综合久久爱伊人 | 国产91丝袜在线播放 | 色婷婷一区二区三区 | 黄色av网站免费看 | 天天操天天看 | 国产乱xxxx | 看免费黄色大片 | 免费一区在线 | 97se亚洲综合在线韩国专区福利 | av性色全交蜜桃成熟时 |