授权属性不在DbDataController上过滤

时间:2012-02-28 01:24:56

标签: asp.net-mvc-4

我正在尝试使用新的MVC4 DbDataController来公开一个宁静的数据api。

我的问题是试图确保这一点。我创建了从授权属性

派生的自定义授权属性
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();
  }
}

你可以看到我已经在控制器和动作上尝试了我的属性,但它并没有触发任何一个。我在我的authorize属性函数中设置了一个断点,它没有被调用。

我很确定Scott Guthrie说这会起作用。我做错了,还是我需要一种完全不同的方法来保护它们?

1 个答案:

答案 0 :(得分:3)

要使用DataController或从ApiController派生的任何其他类型,您的属性必须来自System.Web.Http.AuthorizeAttribute