[英]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.