我正在编写一个具有移动客户端的 WCF REST 服务。
移动客户端使用 OAuth 中的“authToken”来表示用户的身份。
authToken 是一个字符串参数,目前,它被传递给(几乎)服务中的每个方法。
我想做的是编写类似于 MVC ActionFilter 的东西 - 它为每个方法运行并执行 authToken 处理:验证令牌,查找相关帐户并返回 Account 实例对象- 查找失败意味着返回错误我的方法甚至没有被调用。
我发现这 两个问题与我想做的有点相似,但看起来棘手的部分是以某种方式引入 Account 实例?我可以很高兴地创建实现 IOperationBehavior 接口的 [AuthOperation] 属性,但是我无法弄清楚我需要做什么才能引入我查找过的新帐户实例。
public object Invoke(object instance, object[] inputs, out object[] outputs)
{
Account = new Account(_context);
if (!Account.LoadByAuthToken(((string)inputs[0]).FromEncodedString()))
{
outputs = new object[0];
return new ErrorResponse
{
Code = ResponseCode.Exception.ToString(),
DebugMessage = MyStrings.AuthToken_NotFound
};
}
如何将我的 Account 实例传递给调用的方法?
object result = this._originalInvoker.Invoke(instance, IntroduceAccount(inputs,Account), out outputs);
return result;
}
最终我想要的是拥有
public MyResponse GetContacts(string authToken)
暴露在服务中,但是
public MyResponse GetContacts(Account acct)
或者
public MyResponse GetContacts(Account acct, string authToken)
实际在服务器上实现 - 并由“操作过滤器”处理 authToken -> 帐户转换。
如果答案是“不要使用 WCF,这样做……”,我什至会很高兴,只要提出的其他任何建议也符合我的其他要求。