相关疑难解决方法(0)

ASP.NET Web API的自定义MVC AuthorizeAttribute

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

     <Authorize(Users:="myUser")>
     Public Function GetTodoItems() As IQueryable(Of TodoItem)
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好:它将允许"myUser"检索项目,机器人没有其他人被允许访问.但是,当我使用自定义授权尝试相同的方法时,将跳过整个检查,并且任何用户都可以访问该资源.我的派生类中AuthorizeCoreOnAuthorization被覆盖的方法都没有被调用.

     <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中的错误?

asp.net-mvc-4 asp.net-web-api

14
推荐指数
1
解决办法
2万
查看次数

"在发送HTTP标头后无法重定向." 使用HttpStatusCode.Unauthorized返回HttpResponseMessage时

我正在使用新的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重定向.

c# asp.net-mvc-4 asp.net-web-api

5
推荐指数
1
解决办法
5505
查看次数

标签 统计

asp.net-mvc-4 ×2

asp.net-web-api ×2

c# ×1