我试图做一些自定义授权,所以我创建了一个控制器覆盖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