Asp.net mvc 4 ASP.NET Web API的自定义MVC属性

Asp.net mvc 4 ASP.NET Web API的自定义MVC属性,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我试图在Web API控制器上实现自定义授权属性,但遇到了意外行为 <Authorize(Users:="myUser")> Public Function GetTodoItems() As IQueryable(Of TodoItem) 派生类继承自System.Web.Mvc.AuthorizeAttribute,项目部署在IIS上,启用Windows身份验证和模拟,禁用匿名身份验证 如果我向MVC控制器添加相同的自定义授权,那么它就可以工作。但是在API

我试图在Web API控制器上实现自定义授权属性,但遇到了意外行为

     <Authorize(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)
派生类继承自
System.Web.Mvc.AuthorizeAttribute
,项目部署在IIS上,启用Windows身份验证和模拟,禁用匿名身份验证


如果我向MVC控制器添加相同的自定义授权,那么它就可以工作。但是在API控制器上,什么都没有。如果
Authorize
属性也不起作用,那么它会更有意义。我错过什么了吗?这是预期的行为,还是测试版中的错误?

您应该使用System.Web.Http.AuthorizationAttribute中的System.Web.Http.dll作为Web API,而不是
System.Web.Mvc.AuthorizationAttribute


这是因为
namespace System.Web.Http.AuthorizeAttribute
派生自
AuthorizationFilterAttribute
。过滤器由Web API自动处理。在我自己的实现中,我直接从
AuthorizationFilterAttribute
派生来处理基本HTTP身份验证。

我为基本授权构建了自己的自定义实现:


也许这会有所帮助。

谢谢,更改名称空间很有效!使用
System.Web.Mvc.AuthorizeAttribute
对Web API起作用,而我的类(从该类派生而来)却不起作用,这似乎仍然很奇怪。Mvc和Web API之间似乎有许多类型重复。也许他们会被合并,我们会在发行版中有一个类型的样本。所以可能是
AuthorizeAttibute
对象中的任何一个正在进行内部检查,这只是一个猜测。
     <MyAuth(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)