简体   繁体   English

如何在WCF Rest Service中将类对象作为参数传递

[英]How to pass class object as a parameter in WCF Rest Service

Here is my Interface code 这是我的界面代码

      [OperationContract]
       [WebGet(RequestFormat = WebMessageFormat.Json,
         ResponseFormat = WebMessageFormat.Json,
          BodyStyle = WebMessageBodyStyle.Bare,
          UriTemplate = "/Insert?customer={customer}")]
       void InsertDetailsData(CustomerClass customer);

My Class method is like 我的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();

    }

But I am getting error like 但是我收到了类似的错误

Operation 'InsertDetailsData' in contract 'ICustomerService' has a query variable named 'customer' of type 'CustomerService.CustomerClass', but type 'CustomerService.CustomerClass' is not convertible by 'QueryStringConverter'. 合同'ICustomerService'中的操作'InsertDetailsData'具有名为'CustomerService.CustomerClass'类型的名为'customer'的查询变量,但类型'CustomerService.CustomerClass'无法由'QueryStringConverter'转换。 Variables for UriTemplate query values must have types that can be converted by 'QueryStringConverter'. UriTemplate查询值的变量必须具有可以由“ QueryStringConverter”转换的类型。

So tried with 因此尝试

  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();
        }
    }

Still I am facing same error. 我仍然面临着同样的错误。

This request is only send simple types, uritemplates make a mapped parametres in method. 该请求仅发送简单类型,uritemplates在方法中创建映射的参数。

[WebGet(UriTemplate = "Method/{Par1}/{par2}")]

if you want to pass class must be use POST method WebInvoke. 如果要传递类,必须使用POST方法WebInvoke。

This msdn description 此msdn说明

https://msdn.microsoft.com/tr-tr/library/system.servicemodel.web.webinvokeattribute%28v=vs.110%29.aspx https://msdn.microsoft.com/tr-tr/library/system.servicemodel.web.webinvokeattribute%28v=vs.110%29.aspx

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM