我試圖做一些自定義授權,所以我創建了一個控制器覆蓋OnAuthorization
方法。我還將Authorize
屬性應用於此控制器。 問題是爲什麼OnAuthorization
方法在基本表單身份驗證過程之前調用?爲什麼onAuthorization在驗證之前執行?
我想在認證之後授權用戶。 我錯過了什麼嗎?
下面是代碼:
[Authorize]
public class AuthorizationController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
List<string> allowedControllers = new List<string>() { "SecurityController" };
List<string> allowedActions = new List<string>() { "Index" };
string controllerName = filterContext.Controller.GetType().Name;
string actionName = filterContext.ActionDescriptor.ActionName;
if (!allowedControllers.Contains(controllerName)
|| !allowedActions.Contains(actionName))
{
filterContext.Result = View("UnauthorizedAccess");
}
}
}
,我與測試控制器是一樣的東西:
public class SecurityController : AuthorizationController
{
public ActionResult Index()
{
return View();
}
public ActionResult AnotherIndex()
{
return View();
}
}
好吧,它不會像我期望的那樣發生。對於上面的例子,當我想訪問AnotherIndex操作時,我期望獲得登錄頁面,但是我得到了UnauthorizedAccess。 – misha 2012-02-20 18:13:07
編輯完成後:我明白了,但是如果我重寫AuthorizeAttribute,則無法訪問其他操作,例如將用戶重定向到告訴他他未被授權而不是登錄的頁面。 – misha 2012-02-20 18:17:02
@misha當然可以。是什麼讓你覺得你不能? – Dismissile 2012-02-20 18:17:45