【问题标题】:How to pass class object as a parameter in WCF Rest Service如何在 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]:stackoverflow.com/questions/6783264/…
  • 对于通过 REST 插入数据,您应该根据 REST 主体使用 PUT 属性而不是 GET。你能发布你的原始请求的样子吗?

标签: c# query-string wcf-rest


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 2013-01-31
    • 1970-01-01
    • 2014-06-24
    • 2016-08-13
    • 2012-03-30
    • 2017-02-12
    • 1970-01-01
    相关资源
    最近更新 更多