Asp.net mvc 4 未在DbDataController上筛选授权属性

Asp.net mvc 4 未在DbDataController上筛选授权属性,asp.net-mvc-4,Asp.net Mvc 4,我试图使用新的MVC4 DbDataController来公开restful数据api 我的问题是如何确保这一点。我已经创建了从Authorize属性派生的自定义授权属性 public class AdminOnlyAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { if (!IsAllowed()) {

我试图使用新的MVC4 DbDataController来公开restful数据api

我的问题是如何确保这一点。我已经创建了从Authorize属性派生的自定义授权属性

public class AdminOnlyAttribute : AuthorizeAttribute
{
  public override void OnAuthorization(AuthorizationContext filterContext)
  {
    if (!IsAllowed()) {
      filterContext.Result = new HttpUnauthorizedResult("Not logged in");
  }
  ...
}
当应用到我的正常控制器动作时,它工作得很好。我尝试在我的数据服务中使用相同的东西,如下所示:

[AdminOnlyAttribute]
public class DataServiceController : DbDataController<AppBuilderDataContext>
{
  [AdminOnlyAttribute]
  public IQueryable<Thing> GetThings()
  {
    return DbContext.AllMyThings();
  }
}
[AdminOnlyAttribute]
公共类DataServiceController:DbDataController
{
[AdminOnlyAttribute]
公共IQueryable GetThings()
{
返回DbContext.AllMyThings();
}
}
您可以看到,我已经在控制器和动作上尝试了我的属性,但这两个属性都没有触发。我在authorize属性函数中设置了一个断点,但没有调用它


我很确定Scott Guthrie说这会奏效的。我做错了吗,或者我需要一种完全不同的方法来保护它们吗?

要使用
数据控制器
或从
ApiController
派生的任何其他类型,您的属性必须派生自
System.Web.Http.AuthorizeAttribute
才能使用
数据控制器
或从
ApiController
您的属性必须来自
System.Web.Http.AuthorizeAttribute

谢谢您的回复。这与System.Web.Mvc.attribute有很大不同。除了msdn对其存在的简短承认之外,互联网上还没有关于这一点的任何内容。我的第一个问题是,这种类型的属性是否也适用于我的常规mvc操作?或者我需要一个重复的授权属性类吗?在Beta版中,是的,您需要定义属性类型,一个用于MVC控制器,另一个用于API控制器。我们正在enxt drop中对此进行改进。我决定绕过这个问题,创建一个自定义RoleProvider,然后使用AuthorizeAttribute=System.Web.Http.AuthorizeAttribute将其放在DbDataController
的顶部然后我可以将其放在我的数据操作(或类)
[Authorize(Roles=“SuperAdmin”)]
它还没有完成我需要的所有操作,但这只是一个开始。在某些情况下,我需要查找用户记录,以检查他们是否可以访问特定的记录,因此这不会减少它。如果我们拥有的相同MVC过滤器能够与这些新控制器一起使用,那就更好了。谢谢您的回复。这与System.Web.Mvc.attribute有很大不同。除了msdn对其存在的简短承认之外,互联网上还没有关于这一点的任何内容。我的第一个问题是,这种类型的属性是否也适用于我的常规mvc操作?或者我需要一个重复的授权属性类吗?在Beta版中,是的,您需要定义属性类型,一个用于MVC控制器,另一个用于API控制器。我们正在enxt drop中对此进行改进。我决定绕过这个问题,创建一个自定义RoleProvider,然后使用AuthorizeAttribute=System.Web.Http.AuthorizeAttribute将其放在DbDataController
的顶部然后我可以将其放在我的数据操作(或类)
[Authorize(Roles=“SuperAdmin”)]
它还没有完成我需要的所有操作,但这只是一个开始。在某些情况下,我需要查找用户记录,以检查他们是否可以访问特定的记录,因此这不会减少它。如果我们拥有的相同MVC过滤器能够与这些新控制器配合使用,那就更好了。