2010-06-03 65 views
44

我正在WCF 4.0中開發一些RESTful服務。我有一個方法如下:WCF中URITemplate中的可選查詢字符串參數?

[OperationContract] 
    [WebGet(UriTemplate = "Test?format=XML&records={records}", ResponseFormat=WebMessageFormat.Xml)] 
    public string TestXml(string records) 
    { 
     return "Hello XML"; 
    } 

所以,如果我定位我的瀏覽器http://localhost:8000/Service/Test?format=XML&records=10,然後一切正常exepcted。

但是,我希望能夠導航到http://localhost:8000/Service/Test?format=XML,並取消URL的「& records = 10」部分。但是現在,由於URI與預期的URI模板不匹配,我得到服務錯誤。

那麼如何實現我的一些查詢字符串參數的默認值?例如,如果該部分不在查詢字符串中,我想將「記錄」默認爲10。

回答

53

注意:此問題已過時,請參閱其他答案。


這看起來不被支持。

不過,微軟已經意識到這一問題,並有一個變通:

您可以通過 得到預期的效果從 UriTemplate您WebGet或 WebInvoke省略查詢字符串屬性,並使用 WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters 從您的處理程序中檢查, 設置默認值等,查詢 參數。

https://connect.microsoft.com/VisualStudio/feedback/details/451296/

+1

您的默認值,以便看起來運行良好。但是,如果我嘗試針對此運行單元測試,它將不再起作用,因爲單元測試沒有WebOperationContext。我查了幾個例子,但沒有人有一個簡單的例子來說明如何模擬WebOperationContext? – Shafique 2010-06-07 21:33:23

+0

嘗試使用Google搜索「模擬WebOperationContext」。關於如何做到這一點,有很多不同的想法。 – luksan 2010-06-07 23:45:37

+0

給男人一個+1,他的解決方案有效!在這裏,我會開始。 – EdgarVerona 2010-07-02 15:57:28

16

根據this answer這是在.NET 4.0中修復的。無法提供查詢字符串參數似乎導致它被賦予該類型的默認值。

2

這似乎在WCF 4.0工作。
只要確保設置在「Service1.svc.cs」

public string TestXml(string records) 
{ 
    if (records == null) 
     records = "10"; 

    //... rest of the code 
} 
相關問題