以下代码用于使用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个参数(名称和城市)的对象。我怎样才能做到这一点?
答案 0 :(得分:1)
WCF UriTemplate不支持复杂对象。在这种情况下,您必须坚持使用.NET中的主要类型。如果您仍想使用复杂对象作为方法的参数,则必须删除UriTemplate并使用JSON传递对象。如果你真的不想放弃UriTemplate,你的最后一个选择是使用字符串参数:
AddDetailsResponse AddEmpDetails(string objEncodedReq);
其中objEncodedReq
是您的序列化对象(例如XML序列化)并使用Base64编码。您必须从客户端级别执行此操作。