1.創建一個類(用來檢查用戶是否登錄和用戶權限)代碼如下:
public class AuthorizeFilterAttribute: 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.頁面程序,也就是控制器里的程序,如下
//AuthorizeFilter是擴展特性,自定義特性名稱是根據上面的類MemberCheckAttribute名進行變化
//當訪問/user/index時,程序會先走自定義特性AuthorizeFilter然后再走Index
[AuthorizeFilter]
public class UserController : Controller
{
public ActionResult Index()
{
return View();
}
}