如何在WCF中传递UriTemplates中的对象

时间:2012-07-01 14:06:40

标签: c# .net wcf

以下代码用于使用WCF公开RESTful应用程序。在这里,我通过UriTemplate类中使用的AddDetailsRequest个对象传递输入。

[ServiceContract]
public interface IMyRestService
{
    [OperationContract(Name = "AddEmployee")]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Xml, UriTemplate = "AddEmpDetails/{objReq}")]
    AddDetailsResponse AddEmpDetails(AddDetailsRequest objReq);
}

班级AddDetailsRequest

[DataContract(Name = "AddDetailsRequest")]
public class AddDetailsRequest
{
    [DataMember(IsRequired = true, Name = "Name")]
    public string Name { get; set; }
    [DataMember(IsRequired = true, Name = "City")]
    public string City { get; set; }
}

我遇到的问题意味着,我无法通过UriTemplate传递对象。我想在UriTemplate中传递具有2个参数(名称和城市)的对象。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

WCF UriTemplate不支持复杂对象。在这种情况下,您必须坚持使用.NET中的主要类型。如果您仍想使用复杂对象作为方法的参数,则必须删除UriTemplate并使用JSON传递对象。如果你真的不想放弃UriTemplate,你的最后一个选择是使用字符串参数:

AddDetailsResponse AddEmpDetails(string objEncodedReq);

其中objEncodedReq是您的序列化对象(例如XML序列化)并使用Base64编码。您必须从客户端级别执行此操作。