【问题标题】:WCF REST Service - Replace a string parameter with a class instance on every method?WCF REST 服务 - 用每个方法上的类实例替换字符串参数?
【发布时间】:2012-04-30 16:17:02
【问题描述】:

我正在编写一个具有移动客户端的 WCF REST 服务。
移动客户端使用类似于 OAuth 的“authToken”来表示用户的身份。
authToken 是一个字符串参数,目前,它被传递给(几乎)服务中的每个方法。

我想做的是编写类似于 MVC ActionFilter 的东西——它为每个方法运行并执行 authToken 处理:验证令牌、查找相关帐户并返回 Account 实例对象 - 查找失败意味着返回错误,甚至没有调用我的方法。

我发现thesetwo 的问题与我想做的有点相似,但看起来棘手的部分是以某种方式引入 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 -> 帐户转换由“Action Filter”处理。

如果答案是“不要使用 WCF,像这样......”,我什至会很高兴,只要提出的其他任何建议也符合我的其他要求。

【问题讨论】:

    标签: c# wcf rest


    【解决方案1】:

    您是否考虑过使用拦截?看看this 的例子。还有其他拦截器实现。这个link 也有更多选择。

    【讨论】:

    • 您是指第一个链接上的this 吗?我会调查的。谢谢。
    【解决方案2】:

    事实证明,我真的很笨,而且(几乎)实现我的目标实际上相当简单。

    在上面的 (Invoke) 方法中,您可以访问正在调用的实例....所以....

            var wcfAccountRequired = instance as IWcfAccountRequired;
            if (wcfAccountRequired != null)
            {
                (wcfAccountRequired).Account = Account;
            }
    

    ...我只是确保(实例)正在实现特定接口并为其分配 Account 属性。如果我没有成功检索帐户,我可以只返回错误而不调用任何内容。

    不完美,但简洁地解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      • 1970-01-01
      相关资源
      最近更新 更多