2017-02-10 57 views
0

我需要定義一個WCF GET方法,它可以將所有查詢參數作爲單個字符串進行檢索。例如:將WCF查詢參數作爲單個字符串進行查看

https://xxx.xxx.xxx.xxx/token?client_id=abc_def&client_name=&type=auth&code=xyz

我想要抓住字符串 「CLIENT_ID = abc_def & CLIENT_NAME = &類型= AUTH &代碼= XYZ」。

如何爲該方法定義URI模板?我嘗試了以下,但它不起作用,因爲我會得到400錯誤的請求。更換/」和‘?’沒有什麼區別。

[WebGet(UriTemplate = "token/{Params}")] 
[OperationContract] 
Stream GetToken(string Params); 

該方法將調用外部服務,只是前進的任何查詢它接收到。我不想單獨檢索每個參數,因爲它是可能的參數。該參數可以增加

另一個URL會是這樣的:

https://xxx.xxx.xxx.xxx/person/123456?client_id=abc_def&client_name=&type=auth&code=xyz

在這種情況下,我想抓住兩個字符串「123456」和「的client_id = abc_def & client_name = & type = auth & code = xyz「。

如何爲該方法定義URI模板?

回答

0

您可以設置預期的查詢字符串參數UriTemplate,像這樣:

(UriTemplate = "token/{Params}&client_id={clientId}&client_name={clientName}&type={type}&code={code})

而且該方法可以聲明如下:

Stream GetToken(string Params, string clientId, string clienteName, string type, string code); 
+0

嗨,我已經知道如何做到這一點。但那不是我想要的。我想要將整個查詢參數作爲單個字符串。正如我在文章中所解釋的,我的服務將調用另一個外部服務,傳遞查詢參數。我不想分析每個查詢參數。如果我能夠作爲單個字符串進行檢索,那麼如果將來查詢參數發生更改,則不需要更改代碼。 – user3573403

+0

它看起來很明顯,但是,你嘗試過'HttpContext.Current.Request.QueryString'嗎? –

+0

否。首先,我該如何指定方法的URI模板? – user3573403

0

你可以省略URI模板使用NameValueCollectionWebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters 然後只需進行一次'ToString()'調用,你將得到你想要的

String fullQueryParams = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters.ToString() 

如果您需要的路徑爲好,例如檢索person123456字符串的URL:

https://xxx.xxx.xxx.xxx/person/123456?client_id=abc_def&client_name=&type=auth&code=xyz

你可以使用WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RelativePathSegments。然後你的OperationContract實現將是這樣的:

String fullQueryParams = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters.ToString(); 
//fullQueryParams = "client_id=abc_def&client_name=&type=auth&code=xyz" 

var pathsCollection = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RelativePathSegments; 
//pathsCollection = ["person","12345"] 
相關問題