2011-11-17 24 views
1

我想創建兩個Rest方法,這些方法根據URI中的查詢字符串參數而有所不同。Rest方法因查詢字符串參數而異

[WebGet(UriTemplate = "Guest/{guestId}?day={day}&type={type}")] 
[OperationContract(Name = "GetDetailByDayAndActivity")] 
public GuestDetail GetDetail(string guestId, DateTime day, string type) 

[WebGet(UriTemplate = "Guest/{guestId}?day={day}")] 
public GuestDetail GetDetail(string guestId, DateTime day) 

這給了錯誤:

"Operation 'GetDetailByDayAndActivity' in contract 'IRestService' has a UriTemplate that expects a parameter named 'TYPE', but there is no input parameter with that name on the operation. "

訪問一個只有像白天參數的方法時:http://testserver/GuestService/Guest/0?day=2011-10-20

如何才能實現這一目標?

回答

4

想通了該錯誤的原因。 接口中的參數名稱不同。 URI中使用的名稱必須與接口中的名稱匹配。

此外,如果我們使用查詢字符串,則不需要定義單獨的方法。單個方法可以工作,在這種情況下,其他參數將具有空值。

+0

老兄!我遇到了同樣的問題。看着你的回答,讓我意識到我在做同樣的錯誤事情,並責怪除了我之外的任何東西!謝謝! –

1

您需要將您的GET PARAMS映射到資源

試試這個

[WebGet(UriTemplate = "Guest/{guestId}/{day}/{type}" 

第二個

[WebGet(UriTemplate = "Guest/{guestId}/{day}" 

請注意,您需要更改您的調用

另一點將所有簽名更改爲字符串

例如

[WebGet(UriTemplate = "Guest/{guestId}?day={day}")] 
public GuestDetail GetDetail(string guestId, **string day**) 

,比鑄造成datetime

+0

這是我們需要使用查詢字符串的要求,所以不能更改它。關於簽名,日期時間也起作用。 – Lalit

+1

嘗試將其更改爲字符串 –

+0

只有當它是URI的一部分時,才需要將數據類型用作字符串。如果它是查詢字符串的一部分,你可以使用日期,int等 – Lalit