【问题标题】:Mapping Complex Type in REST Enabled WCF Service在启用 REST 的 WCF 服务中映射复杂类型
【发布时间】:2009-11-03 18:28:39
【问题描述】:

我正在尝试修复我们现有的 WCF 服务,其中一个障碍是使用 Uritemplate 映射复杂类型。例如看看下面的代码

[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 声明肯定不起作用,但这就是我将输入查询变量映射到该对象的属性之一的意图。这可能吗?

提前感谢您的帮助。

【问题讨论】:

标签: wcf rest


【解决方案1】:

你给出的例子并没有说明问题。在这种情况下,只需要传递一个股票代码、一个简单的字符串,就不需要复杂的类型了。

如果您想要传递一组更复杂的数据(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...
}

【讨论】:

    【解决方案2】:

    如果要将查询字符串参数映射到对象中的属性,则需要使用 WebInvoke。不幸的是,使用 GET,您必须手动执行此操作。

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      相关资源
      最近更新 更多