加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-4 – ASP.NET Web API的自定义MVC AuthorizeAttribu

发布时间:2020-12-15 23:43:28 所属栏目:asp.Net 来源:网络整理
导读:我试图在我的Web API控制器上实现一个自定义授权属性,但遇到了一个意想不到的行为. Authorize(Users:="myUser") Public Function GetTodoItems() As IQueryable(Of TodoItem) 上面的代码工作得很好:它将允许“myUser”检索项目,bot没有人被允许访问.但是,当
我试图在我的Web API控制器上实现一个自定义授权属性,但遇到了一个意想不到的行为.
<Authorize(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)

上面的代码工作得很好:它将允许“myUser”检索项目,bot没有人被允许访问.但是,当我通过自定义授权尝试相同的方法时,将跳过整个检查,任何用户都可以访问该资源.我的派生类中的AuthorizeCore和OnAuthorization被覆盖的方法都不被调用.

<MyAuth(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)

派生类继承自System.Web.Mvc.AuthorizeAttribute,该项目部署在IIS上,Windows Authentication&启用模拟,禁用匿名身份验证.

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

解决方法

您应该使用System.Web.Http.Attribute从System.Web.Http.dll为Web API而不是System.Web.Mvc.AuthorizeAttribute.

也就是说,因为名称空间System.Web.Http.AuthorizeAttribute是从AuthorizationFilterAttribute派生的.过滤器由Web API自动处理.在我自己的实现中,我直接从AuthorizationFilterAttribute派生来处理基本的HTTP身份验证.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读