[英]How to pass class object as a parameter in WCF Rest Service
这是我的界面代码
[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'具有名为'CustomerService.CustomerClass'类型的名为'customer'的查询变量,但类型'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();
}
}
我仍然面临着同样的错误。
该请求仅发送简单类型,uritemplates在方法中创建映射的参数。
[WebGet(UriTemplate = "Method/{Par1}/{par2}")]
如果要传递类,必须使用POST方法WebInvoke。
此msdn说明
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.