通过API发布对象数组

时间:2018-10-10 17:09:26

标签: c# .net webclient

我正在尝试向其发布数据的API,以便可以在网站上注册用户。我正在执行POST,其中一个参数需要一个对象数组。

在文档中给出了示例-

"registration_answers_attributes" : [
{
      "registration_question_id" : "2",
      "answer" : "Because I'm Batman"
    },
    {
      "registration_question_id" : "16",
      "answer" : "Alfred"
    }
]

我正在运行的代码如下:

var reqparm = new System.Collections.Specialized.NameValueCollection();

var customFields = _DataFields();
List<RegistrationKeyPair> keys = new List<RegistrationKeyPair>();

keys.Add(new RegistrationKeyPair(customFields[1]["id"], model.SelectedUserGroup));

reqparm.Add("registration_answers_attributes",
    string.Join(";", keys.Select(x => "[{" + "\"registration_question_id\":" + x.registration_question_id + ", \"answer\" : \"" + x.answer + "\"}]").ToArray()));

byte[] responsebytes = client.UploadValues(this._url + "/api/v2/users", "POST", reqparm);
string responsebody = Encoding.UTF8.GetString(responsebytes);
  

registration_answers_attribute

     

数组

     

哈希数组,其中包含一个registration_question_id和一个答案。部分或全部注册问题可能需要答案。请参阅registration_questions端点文档

我添加到reqparm中的字符串似乎与文档所要求的相匹配,但是每次运行程序时都会失败。

1 个答案:

答案 0 :(得分:0)

将问题分解为更小的步骤。

  1. 尝试仅以其请求的格式将JSON提交给API。在能够手动执行此操作之前,调试其余代码对您没有多大好处。
  2. 确保您可以成功地重新创建有效的JSON。
  3. 提交JSON

对于第一步,您可以使用Fiddler或在应用程序中编写测试方法。我将从他们网站上的示例开始,或者使用与下面的示例类似的有效JSON。有很多不同的方法使此方法不起作用。确保您查看API文档并获得正确的content-type / etc。

{
    "registration_answers_attributes": [{
            "registration_question_id": "2",
            "answer": "Because I'm Batman"
        },
        {
            "registration_question_id": "16",
            "answer": "Alfred"
        }
    ]
}

对于步骤2,我强烈建议创建POCO类,并使用JSON.Net之类的库为您序列化。这样可以避免调试时的很多痛点。我创建了一些示例类。

public class MyAnswers
{
    public List<RegistrationAnswers> registration_answers_attributes { get; set; }
}

public class RegistrationAnswers
{
    public string registration_question_id { get; set; }
    public string answer { get; set; }
}

最后一部分,您实际上只需要弄清楚他们希望您如何使用他们的API。如果您要提交序列化的JSON,则可能需要使用UploadString,并且可能要使用Content-Type: application/json。没有访问他们的API的权限,这里的任何人都很难说。