【问题标题】:Send Android class to WCF webservice将 Android 类发送到 WCF 网络服务
【发布时间】:2013-07-31 17:32:10
【问题描述】:

我正在尝试使用 REST 发送到公开的网络服务。但我得到的是 400(错误请求。)

您如何通过 REST 发送模型,该模型将正确映射到另一端的模型。我不想做的是将所有 100 个参数单独暴露在连接点中。

    [OperationContract]
    [WebInvoke(
        Method = "POST",
        UriTemplate = "SaveData",
        BodyStyle = WebMessageBodyStyle.WrappedRequest,
        ResponseFormat = WebMessageFormat.Json,
        RequestFormat = WebMessageFormat.Json)]
    void SaveData(datum data);

但我无法做的是传递一个有效的基准对象。

     // Build JSON string
     JSONStringer vehicle;
    try {
        vehicle = new JSONStringer()
             .object()
                 .key("datum")
                     .object()
                         .key("ID").value(5)
                         .key("Name").value("test")
                         .key("No").value(54)
                         .key("Description").value("Test")
                     .endObject()
                 .endObject(); 

      HttpPost request = new HttpPost(address + "/SaveData");
     Log.d("WebInvoke", "Connection : " + address + "/SaveData");
     request.setHeader("Accept", "application/json");
     request.setHeader("Content-type", "application/json");
         StringEntity entity = new StringEntity(vehicle.toString());
         Log.d("StringEntity", vehicle.toString());
         request.setEntity(entity);

         // Send request to WCF service
         DefaultHttpClient httpClient = new DefaultHttpClient();
         HttpResponse response = httpClient.execute(request);

         Log.d("WebInvoke", "Saving : " +    response.getStatusLine().getStatusCode());
             // Saving : 400

基准类:

[DataContract]
public partial class datum
{
    [DataMember(Name = "ID")]
    public int ID { get; set; }
       [DataMember(Name = "Name")]
    public string Name { get; set; }
     [DataMember(Name = "No")]
    public Nullable<int> No { get; set; }

        [DataMember(Name = "Description")]
    public string Description { get; set; }
}

【问题讨论】:

  • 你得到什么 json 以及你在另一边期待什么 json?
  • @OskarKjellin {"datum":{"ID":5,"Name":"test","No":54,"Description":"Test"}} 这对我来说是正确的。类datumintStringintString。不确定它应该如何映射,也不确定如何查看服务器收到的内容。
  • 尽量不要将它放在基准键中
  • @OskarKjellin {"ID":5,"Name":"test","No":54,"Description":"Test"} 仍然给出 400。

标签: c# android .net wcf rest


【解决方案1】:

应该是:

vehicle = new JSONStringer()
             .object()
                 .key("data")
                     .object()
                         .key("ID").value(5)
                         .key("Name").value("test")
                         .key("No").value(54)
                         .key("Description").value("Test")
                     .endObject()
                 .endObject(); 

来源: WCF BodyStyle WrappedRequest doesn't work for incoming JSON param?

【讨论】:

  • 谢谢,我现在有 {"data":{"ID":5,"Name":"test","No":54,"Description":"Test"}} 但仍然收到 400 错误:(
  • 已添加到问题中。并为所有帮助 +1
  • 您是否从服务器获得任何响应正文?
  • 只是错误请求:400。我无法从浏览器运行它,因为不允许使用方法(Post 方法),而且我不知道如何在 fiddler2 中构建它,也不会拦截来自 android 的调用.所以对身体不确定。我将其更改为返回一个 int。我可以尝试在 android 上获得它。
  • 嘿,我实际上只是将return data.ID + data.Name + data.Description + data.No; 放在方法的顶部,并将返回类型更改为字符串。安卓收到"5testTest54" 所以这是我的方法。其中我可以自己调查。你已经回答了我关于 WCF 映射模型的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2012-04-03
相关资源
最近更新 更多