国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 擴展 > MVC > 正文

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

2024-09-06 20:44:35
字體:
供稿:網(wǎng)友

之前的學(xué)習(xí)中,在對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父類,并在其內(nèi)重寫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中規(guī)定,Action必須返回ActionResult,如果使用前者,在完成跳轉(zhuǎn)前會先進入到請求的頁面,這樣不符合我們使用過濾器的初衷。

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");    }  }}            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 旌德县| 河间市| 高雄市| 永寿县| 牡丹江市| 灵石县| 曲靖市| 无锡市| 清水县| 定州市| 凌源市| 岳阳县| 平舆县| 年辖:市辖区| 湖北省| 松潘县| 上思县| 北安市| 高尔夫| 五指山市| 扬中市| 西充县| 林口县| 佛山市| 南陵县| 牟定县| 耿马| 张家口市| 苏州市| 香港| 休宁县| 尉氏县| 玉门市| 潼南县| 岑溪市| 闻喜县| 温州市| 和龙市| 恩施市| 普宁市| 新龙县|