我最近问了this question并成功设置了我的自定义授权属性 .
但现在我已经打了关于api电话的另一面墙 . 我需要以与动作调用相同的方式授权这些调用 . 我知道System.Web.Http和System.Web.Mvc授权属性之间存在差异 . 所以我创建了一个单独的Api特定属性,基本上做同样的事情 . 但是,我在设置User - principal和身份时遇到了问题,就像我在原始属性中所做的那样 .
我的属性只是检查cookie中的某些值以授权请求,一旦该属性读取了cookie,我将解密的cookie信息存储在自定义主体/身份设置中 . 在我的Api调用中,当我从身份中检索此信息时,我的强制转换失败并且我收到一个空值 .
这就是我存储信息的方式
API
HttpContext.Current.User = new MyPrinciple(new MyIdentity(decCookie.Name, decCookie.UserData));
行动
filterContext.RequestContext.HttpContext.User = new MyPrinciple(new MyIdentity(decCookie.Name, decCookie.UserData));
我如何检索我假设的所需信息是相同的
(User.principal.Identity as MyIdentity).MyData;
Questions
-
我真的需要有2个独立的属性
-
对于Api属性,如何轻松存储信息以供以后在控制器中使用 . 或者基本上我不能以这种方式为这些调用实际获取/设置标识?
EDIT #1
我发现如何从我的ApiController正确访问我的cookie值,我只是缺少对System.Web> _ <的引用 . 问题#2已经解决了!但#1仍然存在 .
2 回答
您只能在c#中的一个类中继承,并且每个authorizeattribute都位于其自己的命名空间中,因此您无法在单个类中执行此操作 .
您可以将其保存在公共名称空间中,然后调用公共类来进行提升 .
可能的解决方案(未经测试)
Web API和MVC没有任何共同点(技术上) - 即使它们看起来相同 . 您需要两个单独的属性 .