c# Asana POST新任务返回错误400(错误请求)
本文关键字:错误 请求 返回 Asana POST 新任务 | 更新日期: 2023-09-27 18:02:24
我有一个问题,在Asana从我的应用程序创建新的任务。
Post方法:
protected static T Post<T>(string route, object action = null, object parameters = null) where T : BaseResult, new()
{
var result = new T();
try
{
var actionUrl = GetActionUrl(route, action);
var request = (HttpWebRequest)WebRequest.Create(actionUrl);
request.Credentials = CredentialCache.DefaultCredentials;
request.Accept = "application/json";
request.Method = WebRequestMethods.Http.Post;
request.Proxy.Credentials = CredentialCache.DefaultCredentials;
request.Headers.Add("Authorization: Bearer " + ApiKey);
if (parameters != null)
{
var contentJSON = JsonConvert.SerializeObject(parameters);
request.ContentType = "application/json";
using (var s = request.GetRequestStream())
using (var sw = new StreamWriter(s, Encoding.UTF8))
sw.Write(contentJSON);
}
var response = (HttpWebResponse) request.GetResponse();
using (var reader = new StreamReader(response.GetResponseStream()))
{
var data = reader.ReadToEnd();
result = JsonConvert.DeserializeObject<T>(data);
}
}
catch (Exception ex)
{
result.IsOk = false;
result.Message = ex.GetMessage();
}
return result;
}
动作URL: https://app.asana.com/api/1.0/workspaces/MyWorkspace/tasksJSON: {"data":{"name":"TestTask1","notes":"Test note","workspace":"*MyWorkspace*","assignee":"*MyAssignee"}}
但是Asana返回给我"远程服务器返回了一个错误:(400)错误的请求。"
如果我更改请求。内容类型到"application/x-www-form-urlencoded",我没有得到错误,但是Asana返回给我一个空字段的新任务。
我接下来要解决的问题应该是什么?
谢谢
如果您正在使用ApiKey(而不是个人访问令牌),我相信您的授权头应该是
"Authorization: Basic " + EncodedAuthInfo
,
EncodedAuthInfo = Convert.ToBase64String(Encoding.Default.GetBytes(ApiKey + ":"))
参见如何使用c#连接Asana Rest API ?或在https://asana.com/developers/documentation/getting-started/auth中使用基本身份验证部分了解使用基本身份验证的详细信息。
我也有点不明白你说的
是什么意思 JSON = {"data": {"name": "TestTask1"} ...
这是您期望的HTTP响应吗?
无论如何,希望我所概述的帮助。
嗯。我想我已经解决了阻碍你的问题。
想象一下您在
上发布的场景https://app.asana.com/api/1.0/workspaces/123456/tasks
,然后传入请求体参数
"workspace":"789012"
Asana平台应该如何处理这些数据?您无意中两次指定了具有冲突数字的工作空间。由于这个原因,你不能指定数据中的工作空间id,当到达一个在URL中也包含工作空间id的端点时。
文档在这一点上令人困惑,因为我们没有澄清哪些参数在URL中找到,哪些参数在请求体中的JSON中找到。我很快就会修好它!如果这确实是导致问题的原因,我很抱歉我们没有弄清楚这一点。
我个人认为,当且仅当工作空间与URL中的工作空间相同时,允许在参数数据中复制工作空间可能是更好的用户体验,但是现在,我们只是检查工作空间id是否只有一个值。如果有多于一个,即使它们是相同的,我们返回400
错误码。
您可以考虑解析响应体,即使在错误时也是如此。在其中,我们试图提供相当体面的信息,说明请求的错误之处。例如,当测试我对您的请求的预感时,我得到的结果是:
"errors":[{"message":"Duplicate field: workspace", ...}]
如果我们在发送信息方面做得很好,我希望你会发现这比Asana沙盒更有用!如果这不是问题,请随意发表评论;我很乐意深入探讨这个问题