匿名用户为什么还构建一个标记为[Authorize]的控制器?

时间:2012-04-03 18:15:51

标签: asp.net-mvc authorization

我的控制器构造函数中有一些代码仅在用户登录时才有效。我已将控制器标记为[授权]和/或将以下内容添加到global.asax(在MVC4中):

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new System.Web.Mvc.AuthorizeAttribute());
}

但是,我的控制器仍在创建,因此发生了异常。这是设计,还是我设置错了?我希望授权启动并将用户发送到我的登录路由/页面,而无需创建受保护的控制器。

2 个答案:

答案 0 :(得分:4)

在创建控制器之前,框架无法读取属性。因此,在有对象调用它之前,不会调用Authorize。

答案 1 :(得分:4)

在检查控制器的属性(如ControllerFactory)之前,必须创建控制器(由Authorize创建)。因此,当匿名用户尝试在标有Authorize的控制器上调用操作时,必须创建控制器。如果存在初始化代码,则只有在用户获得授权后才能完成,您应该在授权用户的操作中执行此操作,而不是在构造函数中执行。