Asp.net MVC過濾器的使用

當咱們網站開發到這裏的時候,咱們雖然已經實現了用戶登陸信息,用戶不通過登陸信息,好比:http://localhost:6941/UserInfo/Index若是我這樣訪問的話,他是能夠進行操做的,因此咱們就須要解決這樣的問題.session

這時候咱們想到了Session,咱們能夠判斷session是否爲空,若是爲空的話直接跳轉到登陸頁面,負責才能進行操做。這樣當咱們在登陸的時候咱們就已經給session賦值ide

1 if (UserName != null)
2 {
3     Session["UserInfo"] = userInfo;
4 }

首先想到了全局過濾器Filter,全部的控制器在執行以前都要通過全局過濾器過濾,可是這裏有一個缺點就是登陸的頁面也會進過全局過濾器的過濾,因此這裏使用全局過濾器不太好,這時候咱們發現咱們的控制器都繼承自Controller,那麼咱們就想咱們是否是須要從新一個基類繼承自Controller,而讓其餘的控制其類繼承自咱們創建的基類,這樣咱們就新建一個基類BaseController類,而後讓須要檢測用戶登陸的頁面繼承自這個基類.網站

namespace LYZJ.UserLimitMVC.UI.Portal.Controllers
{
    public class BaseController : Controller
    {
        //當前登陸的用戶屬性
        public BaseUser CurrentUserInfo { get; set; }
        //從新基類在Action執行以前的事情,在Action執行以前的一個方法
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            //獲得用戶登陸的信息
            CurrentUserInfo = Session["UserInfo"] as BaseUser;
            //判斷用戶是否爲空
            if (CurrentUserInfo == null)
            {
                Response.Redirect("/Login/Index");
            }
        }
    }
}

最後讓咱們須要檢測用戶登陸的控制其都繼承自這個基類便可,這樣咱們就解決了這個需求,繼承代碼以下:spa

public class UserInfoController : BaseController
相關文章
相關標籤/搜索