1.創建一個類(用來檢查用戶是否登錄和用戶權限)代碼如下
public class MemberCheckAttribute : AuthorizeAttribute { //AuthorizeAttribute的OnAuthorization方法內部調用了AuthorizeCore方法,這個方法是實現驗證和授權邏輯的地方, //如果這個方法返回true,表示授權成功,如果返回false, 表示授權失敗, 會給上下文設置一個HttpUnauthorizedResult, //這個ActionResult執行的結果是向瀏覽器返回一個401狀態碼,但是返回狀態碼沒什么意思,通常是跳轉到一個登錄頁面, //可以重寫AuthorizeAttribute的HandleUnauthorizedRequest跳轉到相應的頁面 protected override bool AuthorizeCore(HttpContextBase httpContext) { base.AuthorizeCore(httpContext); if (true) { return true; } else { return false; } } //如果AuthorizeCore返回false才會執行HandleUnauthorizedRequest protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { base.HandleUnauthorizedRequest(filterContext); if (filterContext == null) { throw new ArgumentNullException("filterContext"); } else { filterContext.HttpContext.Response.Redirect("/login.html"); } } }
2.頁面程序,也就是控制器里的程序,如下
//MemberCheck是擴展特性,自定義特性名稱是根據上面的類MemberCheckAttribute名進行變化 //當訪問/user/index時,程序會先走自定義特性MemberCheck然后再走Index [MemberCheck] public class UserController : Controller { public ActionResult Index() { return View(); } }