驗證登錄狀態的方法有:1 進程外Session 2 方法過濾器(建一個類繼承ActionFilterAttribute)然后給需要驗證的方法或控制器加特性標簽
3 :新建一個BaseController 繼承Controller 把后面需要驗證的控制器都改成繼承BaseController 而不是Controller
- namespace Core.ProjectOA.WebApp.Controllers
- {
- public class BaseController : Controller
- {
- //要過濾的控制器可以繼承此BaseController
- /// <summary>
- /// 在控制器執行方法之前執行
- /// </summary>
- /// <param name="filterContext"></param>
- protected override void OnActionExecuted(ActionExecutedContext filterContext)//protected 只能被子類訪問
- {
- base.OnActionExecuted(filterContext);
- if (Session["userInfo"] == null)
- {
- filterContext.Result = Redirect("/Login/Index");// 沒有返回值, 所以不是return 是filterContexr.Result
- }
- }
- }
- }
之所以是filterContext.Result = Redirect("/Login/Index"); 而不是直接跳轉 是因為 過濾器是切面 ,請求必須返回一個ActionResult結果 如果這里直接跳轉,還是需要一個結果,所以還會執行 Index方法 ,所以此處要返回一個結果 (Redirect 返回的就是一個ActionResult) 就不會繼續執行后面的Index方法了
注意:這種方式只能控制get請求新頁面 對於異步請求是無法控制的