我正在尝试使用新的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说这会起作用。我做错了,还是我需要一种完全不同的方法来保护它们?
答案 0 :(得分:3)
要使用DataController
或从ApiController
派生的任何其他类型,您的属性必须来自System.Web.Http.AuthorizeAttribute