如何在 WCF Rest Service 中将类对象作为参数传递
Posted
技术标签:
【中文标题】如何在 WCF Rest Service 中将类对象作为参数传递【英文标题】:How to pass class object as a parameter in WCF Rest Service 【发布时间】:2015-04-10 01:59:44 【问题描述】:这是我的界面代码
[OperationContract]
[WebGet(RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "/Insert?customer=customer")]
void InsertDetailsData(CustomerClass customer);
我的 Class 方法是这样的
public void InsertDetailsData(CustomerClass cust)
SqlConnection scon = new SqlConnection(myConnection);
scon.Open();
cust.CustomerName = "adsd";
cust.Address = "asdasd";
cust.FirstName = "asd";
cust.LastName = "asda";
string query = "Insert into TblCustomer(CustomerName,FirstName,LastName,Address)";
query += " values('" + cust.CustomerName + "','" + cust.FirstName + "','" + cust.LastName + "','" + cust.Address + "')";
SqlCommand cmd = new SqlCommand(query, scon);
cmd.ExecuteNonQuery();
scon.Close();
但是我遇到了类似的错误
合同“ICustomerService”中的操作“InsertDetailsData”有一个名为“customer”的类型为“CustomerService.CustomerClass”的查询变量,但类型“CustomerService.CustomerClass”不能由“QueryStringConverter”转换。 UriTemplate 查询值的变量必须具有可由“QueryStringConverter”转换的类型。
所以尝试了
public class MyQueryStringConverter : QueryStringConverter
public override bool CanConvert(Type type)
return (type == typeof(CustomerClass)) || base.CanConvert(type);
public override object ConvertStringToValue(string parameter, Type parameterType)
if (parameterType == typeof(CustomerClass))
string[] parts = parameter.Split(',');
return new CustomerClass FirstName = parts[0], CustomerName = parts[1], LastName = parts[2], Address = parts[3] ;
else
return base.ConvertStringToValue(parameter, parameterType);
public class MyWebHttpBehavior : WebHttpBehavior
protected override QueryStringConverter GetQueryStringConverter(OperationDescription operationDescription)
return new MyQueryStringConverter();
我仍然面临同样的错误。
【问题讨论】:
此链接将对您有所帮助。 [传递类作为参数][1] [1]:***.com/questions/6783264/… 对于通过 REST 插入数据,您应该根据 REST 主体使用 PUT 属性而不是 GET。你能发布你的原始请求的样子吗? 【参考方案1】:这个请求只发送简单类型,uritemplates在方法中做一个映射参数。
[WebGet(UriTemplate = "Method/Par1/par2")]
如果要传递类必须使用 POST 方法 WebInvoke。
这个 msdn 描述
https://msdn.microsoft.com/tr-tr/library/system.servicemodel.web.webinvokeattribute%28v=vs.110%29.aspx
【讨论】:
以上是关于如何在 WCF Rest Service 中将类对象作为参数传递的主要内容,如果未能解决你的问题,请参考以下文章
web service, wcf, wcf rest, web api之间的区别
如何在 WCF Rest Service 中传递多个参数:C# 中的字符串和流
如何使用 WCF Rest AngularJs 填充下拉列表