2009-07-28 65 views
0

我正在處理一個相當大的查詢字符串(〜30 +參數),並試圖將它們傳遞給我設置的WCF服務。帶有大查詢字符串的WCF UriTemplate

我遇到了幾個與UriTemplate字段有關的問題。此服務設置爲訪問第三方Api,因此查詢字符串可能包含或不包含所有參數。我很好奇,如果最好的方法是建立一個查詢字符串,並將其傳遞給WCF服務或單獨傳遞每個參數(並在某些情況下String.Empty)。

我目前試圖動態建立一個查詢字符串,但是當我嘗試將整個字符串(「?prm1 = val & prm2 = val」)傳遞到uritemplate 「ApiTool.jsp {query}」,或者由於我沒有名稱/值對列出的事實,我擊中了一個無效的uritemplate響應。

+0

我不確定我瞭解情況。你能發表一個簡單的例子嗎? – 2009-07-29 02:41:13

+0

當然可以。本來我是想沿着線的東西: ResponseFormat = WebMessageFormat.Xml, UriTemplate =「{TargetApi.jsp查詢}」 我會通過全面的定製查詢字符串通過此參數。直到最近我才意識到這可能不被允許。 我回來了,做了一些重構(可能是最好的),最後在查詢字符串中輸入了正確的名稱值對: UriTemplate =「TargetApi.jsp?key = {key}&otherParam = {otherParam }「 雖然第二種方法由於大量的變量而變得冗長,但在這種情況下似乎有必要。 – 2009-07-29 14:17:24

回答

0

我很肯定你需要單獨列出參數。否則,UriTemplate將最終逃脫你的東西:

var ut = new UriTemplate("Api.jsp{query}"); 
    var u = ut.BindByName(new Uri("http://localhost"), new Dictionary<string, string>() { { "query", "?param1=a&param2=b" } }); 
    Console.WriteLine(u); // http://localhost/Api.jsp%3Fparam1=a&param2=b 
0

你可以 'UNESCAPE' 與IClientMessageInspector查詢字符串。

public class UriInspector: IClientMessageInspector 
{ 
    public object BeforeSendRequest(ref Message request, IClientChannel channel) 
    { 

     // change/replace request.Headers.To Uri object; 
     return null; 
    } 
} 

請參閱MSDN如何將其添加到您的端點對象。