我正在尝试使用 C# 对我们的 Asana 项目进行 API 调用。我可以毫无问题地“获得”特定项目下的所有任务。我还可以毫无问题地创建“发布”新任务。我很难重新利用用于创建/发布的代码来为现有任务执行“放置/更新”。在传递 JSON 数据时,我曾尝试指定尽可能多的信息,但没有成功更新。我的主要目标是,只是为了能够标记通过 API 完成的任务。如果有人对可能阻止我成功更新/放置对 Asana 任务的调用有任何建议/建议,那将是很棒的。感谢大家的时间。
更新代码 - 不工作
public static bool UpdateTask(string taskId)
{
string json = null;
byte[] bytes = null;
string url = "https://app.asana.com/api/1.0/tasks";
HttpWebRequest req = default(HttpWebRequest);
Stream reqStream = default(Stream);
string authInfo = null;
AsanaUpdateTask TaskData = new AsanaUpdateTask();
try
{
authInfo = AsanaApiKey + Convert.ToString(":");
TaskData.task = taskId;
TaskData.name = "Business Collaboration";
TaskData.assignee = "me";
TaskData.assignee_status = "upcoming";
TaskData.completed = "true";
TaskData.due_on = "null";
TaskData.notes = "new notes from API call 936am";
json = JsonConvert.SerializeObject(TaskData);
json = Convert.ToString("{ \"data\":") + json + "}";
bytes = Encoding.UTF8.GetBytes(json);
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;
req = (HttpWebRequest)WebRequest.Create(url);
req.Method = WebRequestMethods.Http.Put;
req.ContentType = "application/json";
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)));
req.ContentLength = bytes.Length;
reqStream = req.GetRequestStream();
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Close();
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
string res = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(res);
Console.ReadLine();
string finalString = res.Remove(0, 8);
finalString = finalString.Remove((finalString.Length - 1));
var newtask = JsonConvert.DeserializeObject(finalString);
return true;
}
catch (WebException ex)
{
HttpWebResponse response = (HttpWebResponse)ex.Response;
string resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
}
return false;
}
用于更新的 JSON 数据
{ "data":{"task":"156272920352856","name":"Business Collaboration","assignee":"me","assignee_status":"upcoming","completed":"true","due_on":"null","notes":"new notes from API call 936am"}}
创建/发布任务代码 - 当前工作
public static void CreateTask(string workspaceId, string projectId)
{
string json = null;
byte[] bytes = null;
string url = "https://app.asana.com/api/1.0/tasks";
HttpWebRequest req = default(HttpWebRequest);
Stream reqStream = default(Stream);
string authInfo = null;
AsanaCreateTask TaskData = new AsanaCreateTask();
try
{
authInfo = AsanaApiKey + Convert.ToString(":");
TaskData.workspace = workspaceId;
TaskData.name = "Business Collaboration";
TaskData.notes = "new api notes 947am";
json = JsonConvert.SerializeObject(TaskData);
json = json.Insert((json.Length - 1), ",\"projects\":[" + projectId + "]");
json = Convert.ToString("{ \"data\":") + json + "}";
bytes = Encoding.UTF8.GetBytes(json);
req = (HttpWebRequest)WebRequest.Create(url);
req.Method = WebRequestMethods.Http.Post;
req.ContentType = "application/json";
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)));
req.ContentLength = bytes.Length;
reqStream = req.GetRequestStream();
reqStream.Write(bytes, 0, bytes.Length);
reqStream.Close();
HttpWebResponse response = (HttpWebResponse)req.GetResponse();
string res = new StreamReader(response.GetResponseStream()).ReadToEnd();
Console.WriteLine(res);
Console.ReadLine();
string finalString = res.Remove(0, 8);
finalString = finalString.Remove((finalString.Length - 1));
var newtask = JsonConvert.DeserializeObject(finalString);
}
catch (WebException ex)
{
HttpWebResponse response = (HttpWebResponse)ex.Response;
string resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
}
}
用于创建的 JSON 数据
{ "data":{"notes":"new api notes 956am","workspace":"143129080097680","name":"Business Collaboration","projects":[143129080097684]}}