2009-11-03 63 views
2

我試圖休息 - 如果我們現有的WCF服務和其中一個障礙是使用Uritemplate映射覆雜類型。例如看看下面的代碼在啓用REST的WCF服務中映射覆雜類型

[DataContract] 
public class Stock 
{ 
    [DataMember] 
    public string Symbol { get;set; } 
    [DataMember] 
    public double FaceValue { get; set; } 
} 

[ServiceContract] 
public interface IRestService 
{  
    [OperationContract] 
    [WebGet(UriTemplate = "?Symbol={stk.Symbol}")] 
    void Test1(Stock stk); 
} 

以上Uritemplate聲明肯定是不行的,但是這是我輸入查詢變量映射到該對象的屬性之一的打算..這是可能嗎?

提前請求您的幫助。

+0

你可以使用自定義的QueryStringConverter來完成這個工作http://stackoverflow.com/questions/6783264/passing-a-class-as-parameter-in-restful-wcf-service – Schneider 2016-05-25 02:37:06

回答

3

您提供的示例沒有說明問題。在這種情況下,所需要的只是傳遞一個股票代碼,一個簡單的字符串,而且不需要複雜的類型。

如果您想傳遞更復雜的一組數據,一個JSON編碼的對象,請使用帶有PUT或POST的WebInvoke,一個非參數化的UriTemplate以及傳遞表單數據。有關詳細信息,請參閱this answer

如果您希望獲得GET,並且可以傳遞一小組離散參數,則可以使用WebGet,一個適當的UriTemplate,並執行手動映射。像這樣:

public enum OptionFlavor { Put, Call } 
public class OptionInqury { public String Symbol; public String Month; public OptionFlavor Flavor;} 

[OperationContract] 
[WebGet(UriTemplate = "/optionquote/{stockSymbol}/{month}/{flavor}")] 
void GetOptionPrice(string stockSymbol, string month, string flavor) 
{ 
    var x = new OptionInquiry { 
     Symbol = stockSymbol, 
     Month = month, 
     Flavor = (flavor.Equals("put")) ? OptionFlavor.Put : OptionFlavor.Call 
    }; 
    // off you go... 
} 
0

如果要將查詢字符串參數映射到對象中的屬性,則需要使用WebInvoke。不幸的是,使用GET,您必須手動執行此操作。