簡體   English   中英

WCF REST服務-在每個方法上用類實例替換字符串參數?

[英]WCF REST Service - Replace a string parameter with a class instance on every method?

我正在編寫具有移動客戶端的WCF REST服務。
移動客戶端沿着OAuth的行使用“ authToken”來表示用戶的身份。
authToken是一個字符串參數,此參數目前(幾乎)傳遞給服務中的每個方法。

我想做的是寫一個類似於MVC ActionFilter的東西-它對每種方法都運行並執行authToken處理:驗證令牌,查找相關帳戶並返回Account實例對象 -查找失敗意味着返回錯誤我的方法甚至都沒有被調用

我發現了 兩個問題, 這些問題與我想做的事情相似,但是似乎棘手的部分是以某種方式引入了Account實例 我可以很高興地創建實現IOperationBehavior接口的[AuthOperation]屬性,但是我無法確定為引入新的Account實例而需要做的工作。

        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,這樣做……”,我什至會很高興,只要提出的其他建議也符合我的其他要求。

您是否考慮過使用攔截? 看一下這個例子。 那里還有其他攔截器實現。 鏈接還有更多選項。

事實證明,我真的很愚蠢,(幾乎)實現我的目標實際上非常簡單。

在上面的(Invoke)方法中,您可以訪問正在調用的實例。

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

...我只是確保(實例)正在實現特定的接口,並在其上分配Account屬性。 如果我沒有成功檢索一個帳戶,我可以返回錯誤並且不執行任何操作。

不完美,但是可以解決我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM