JSON格式化?在PUT期间设置asana自定义字段的错误请求

时间:2017-05-02 12:15:02

标签: javascript json http asana asana-api

我正在尝试通过PUT请求删除asana任务上的自定义字段的值。

基于我发送的原始json数据来创建具有自定义字段值的任务the documentation here这是我对此应该如何看的最佳猜测:

let data = {custom_fields: { ASANA_CUSTOM_FIELD_ID_NUMBER: null }}; //struggling here
updateTask(ASANA_TASK_ID_NUMBER, data);


function updateTask(id, data) {
  return put(`https://app.asana.com/api/1.0/tasks/${ASANA_TASK_ID_NUMBER}`, data);
}

function put(url, data) {
  return makeRequest({
    "url": url,
    "headers": {"Authorization": "Bearer " + accessCode()},
    "type": "PUT",
    "data": data
  })
}

但我收到错误:

status:400 Bad request 
custom_fields: Value cannot be an array: []

除了我已经尝试过的所有格式之外,这似乎都足以解决了,而且我没有运气解决它。我知道put函数可以很好地更新任务的其他字段,并且我看到与null之外的实际数字相同的错误。

2 个答案:

答案 0 :(得分:0)

您需要使用JSON而不是urlencoded数据发送内容。在我看来,这是Asana API中的一个小错误。他们说他们支持表单编码的内容,但是当你尝试发送一个对象时它不喜欢它,因为它认为它是一个数组。

答案 1 :(得分:0)

我不确定原因,但设置自定义字段似乎与其他API请求不同。

以下是一些适用于设置的代码,您可以弄清楚如何将其应用于您正在使用的任何语言:

function SetCustomField(taskId, fieldId, value) {
  // not sure why, but to set the custom task you have to tell it your content type is json,
  // then send json as a string instead of letting it serialize it for you
  var headers = {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer API-KEY'
  };

  var formData = '{"data": { "custom_fields": { "' + fieldId + '": ' + value + '} } }';

  var options = {
    'method': 'put',
    'headers': headers,
    'payload': formData
  };
  var response = UrlFetchApp.fetch('https://app.asana.com/api/1.0/tasks/' + taskId, options);
  //Logger.log(response.getContentText());
}