我最近问了这个问题并成功设置了我的自定义授权属性。
但现在我在 api 调用方面遇到了另一面墙。我还需要以与操作调用相同的方式授权这些调用。我了解 System.Web.Http 和 System.Web.Mvc Authorize 属性之间存在差异。所以我创建了一个单独的 Api 特定属性,它基本上做同样的事情。但是,我在设置用户 - 主体和身份时遇到了麻烦,就像我在原始属性中所做的那样。
我的属性只需检查 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;
问题
- 我真的需要有 2 个单独的属性吗
- 对于 Api 属性,如何轻松存储信息以供以后在控制器中使用。或者基本上我不能以这种方式为这些调用实际获取/设置身份?
编辑#1
我找到了如何从我的 ApiController 正确访问我的 cookie 值,我只是缺少对 System.Web >_< 的引用。所以问题#2已经解决了!但#1仍然存在。