我试图在我的Web API控制器上实现自定义授权属性,但遇到了意外的行为.
<Authorize(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
Run Code Online (Sandbox Code Playgroud)
上面的代码工作得很好:它将允许"myUser"检索项目,机器人没有其他人被允许访问.但是,当我使用自定义授权尝试相同的方法时,将跳过整个检查,并且任何用户都可以访问该资源.我的派生类中AuthorizeCore的OnAuthorization被覆盖的方法都没有被调用.
<MyAuth(Users:="myUser")>
Public Function GetTodoItems() As IQueryable(Of TodoItem)
Run Code Online (Sandbox Code Playgroud)
派生类继承自System.Web.Mvc.AuthorizeAttribute,并且项目部署在IIS上,启用了Windows身份验证和模拟,并禁用了匿名身份验证.
如果我将相同的自定义授权添加到MVC控制器,那么它可以工作.但是在API控制器上,什么都没有.如果该Authorize属性也不起作用,那就更有意义了.我错过了什么吗?这是预期的行为,还是Beta中的错误?
我正在使用新的Web Api测试版并希望返回
HttpResponseMessage<MyObject>(new MyObject{ MyMessage = "Go Away!" }, HttpStatusCode.Unauthorized)
来自我的一个ApiController动作.
表单身份验证劫持响应,崩溃并将错误添加"Cannot redirect after HTTP headers have been sent."到响应中.
像这样的常规抑制技术不适用于Web Api.
有人找到了解决这个问题的工作吗?
我看过这个论坛帖子,人们报告同样的问题,但那里的解决方案不适用于这种情况.建议的第一个解决方案使用常规抑制技术,该技术不适用于web api.第二个使用HttpMessageHandler在它到达控制器之前拦截请求,我希望控制器正常触发.
在查看之后DelegatingHandler我可以访问HttpResponseMessage但不知道如何处理它以阻止FormsAuth重定向.