Samanage has a…unique API from any I have seen before. To upload an attachment, the following curl file works in Windows:
curl https://api.samanage.com/attachments.json
-H “X-Samanage-Authorization: Bearer ~TOKEN~”
-F “file[attachable_type]=Incident”
-F “file[attachable_id]=~incidentid~”
-F “file[attachment]=@C:/Users/mhagesfeld/Downloads/WHDAPIGuide.pdf”
-H “Content-Type: multipart/form-data”
However, when I save this as a file and import it to Postman, it creates the following, which results in a 500 error:
curl --location --request POST ‘https://api.samanage.com/attachments.json’
–header ‘X-Samanage-Authorization: Bearer ~token~’
–header ‘Content-Type: multipart/form-data’
–form ‘file[attachable_type]=Incident’
–form ‘file[attachable_id]=~incidentid~’
–form ‘file[attachment]=@C:/Users/mhagesfeld/Downloads/WHDAPIGuide.pdf’
The sample curl from the Samanage site is:
curl -H “X-Samanage-Authorization: Bearer TOKEN”
-F “file[attachable_type]=Incident”
-F “file[attachable_id]=12345678”
-F “file[attachment]=@/tmp/example.png”
-H ‘Accept: application/vnd.samanage.v1.3+json’
-H ‘Content-Type: multipart/form-data’
-X POST https://api.samanage.com/attachments.json
I replaced TOKEN, incident ID and atachment location and ran this imported…still 500 error.
Has anyone seen anything like this before or have any clue how I might be able to get it into Postman, and then into RestSharp?
I used https://curl.olsh.me/ to get the following that works in C#:
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod(“POST”), “https://api.samanage.com/attachments.json”))
{
request.Headers.TryAddWithoutValidation(“X-Samanage-Authorization”, “Bearer TOKEN”);
var multipartContent = new MultipartFormDataContent();
multipartContent.Add(new StringContent("Incident"), "file[attachable_type]");
multipartContent.Add(new StringContent("56936836"), "file[attachable_id]");
multipartContent.Add(new ByteArrayContent(File.ReadAllBytes("C:/Users/mhagesfeld/Downloads/WHDAPIGuide.pdf")), "file[attachment]", Path.GetFileName("C:/Users/mhagesfeld/Downloads/WHDAPIGuide.pdf"));
request.Content = multipartContent;
var response = await httpClient.SendAsync(request);
}
}
The issue is with having the file contents be part of a parameter, this specific line:
multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(“C:/Users/mhagesfeld/Downloads/WHDAPIGuide.pdf”)), “file[attachment]”, Path.GetFileName(“C:/Users/mhagesfeld/Downloads/WHDAPIGuide.pdf”));
Adding it as a file does not work, and Postman does not seem to allow this type of parameter, unless I am missing something (and I admit I am not fully familiar with the MultiFormDataContent object).