Reputation: 33
Did anyone add attachments in a task using ASANA API? I am not getting much resources in C sharp or VB .Net. I can Create Task, Fetch tasks, Fetch Users, Fetch Recent Events. But failed to attach any attachment in Task. Please help.
I was using following code:
Dim json As String
Dim bytes As Byte()
Dim url As String = "https://app.asana.com/api/1.0/tasks/" & TaskID & "/attachments"
Dim req As HttpWebRequest
Dim reqStream As Stream
Dim authInfo As String
Dim TaskData As New Task
Try
authInfo = apiKey & Convert.ToString(":")
Dim boundary As String = "----------------------------" + DateTime.Now.Ticks.ToString("x")
Dim formData As NameValueCollection = New NameValueCollection()
Dim postDataStream As Stream = GetPostStream(FilePath, formData, boundary)
req = DirectCast(WebRequest.Create(url), HttpWebRequest)
req.Method = WebRequestMethods.Http.Post
req.ContentType = "multipart/form-data"
req.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.[Default].GetBytes(authInfo)))
req.ContentLength = postDataStream.Length
reqStream = req.GetRequestStream()
''reqStream.Write(postDataStream, 0, postDataStream.Length)
postDataStream.Position = 0
Dim buffer As Byte() = New Byte(1023) {}
Dim bytesRead As Integer = postDataStream.Length
While bytesRead <> 0
bytesRead = postDataStream.Read(buffer, 0, buffer.Length)
reqStream.Write(buffer, 0, bytesRead)
End While
postDataStream.Close()
Dim response As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)
Dim res As String = New StreamReader(response.GetResponseStream()).ReadToEnd()
Console.WriteLine(res)
Console.ReadLine()
reqStream.Close()
Dim finalString As String = res.Remove(0, 8)
finalString = finalString.Remove((finalString.Length - 1))
Dim newtask As AsanaObjectId = JsonConvert.DeserializeObject(Of AsanaObjectId)(finalString)
Return newtask
Catch ex As WebException
Dim response As HttpWebResponse = DirectCast(ex.Response, HttpWebResponse)
Dim resp As String = New StreamReader(ex.Response.GetResponseStream()).ReadToEnd()
Dim obj As Object = JsonConvert.DeserializeObject(resp)
Dim messageFromServer As String = CInt(response.StatusCode).ToString & "-" & vbLf & response.StatusDescription & "-" & obj.ToString
MessageBox.Show(messageFromServer)
End
Catch ex As Exception
MessageBox.Show(ex.Message)
End
End Try
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
Upvotes: 0
Views: 659
Reputation: 848
When uploading attachments to a task via the Asana API make sure that you are setting the content type of the request to "multipart/form-data" including the actual file's data and not a stream of bytes.
https://asana.com/developers/api-reference/attachments
Here is an example in C #
using System;
using System.Net;
using System.Text;
class AttachFile
{
static void Main ()
{
Uri uri = new Uri("https://app.asana.com/api/1.0/tasks/<TASK_ID>/attachments");
string filePath = @"<FILE_PATH>";
WebClient client = new WebClient();
string authInfo = "<API_KEY>" + ":";
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
client.Headers["Authorization"] = "Basic " + authInfo;
client.UploadFile(uri, filePath);
}
}
Upvotes: 2