Postman to C#(Restsharp) code snippet issue - c#

I am feeling pretty stupid right now I can not figure this out. I am using postman to generate some C#(Rest sharp) to post a file to a restAPI.
In postman it works file the code snippet that it generates for C# does not work. The response code shows an internal server error in C#. I can not figure out where the problem is.
Here is the code snippet.
client = new RestClient("https://login.mydgsi.ca/WebAPI/Attachment?aboutType=Candidate&referenceID=1314180%20&attachmentTypeID=Resume&Name=Resume&expirationDate=1900/01/01&Note=Candidate%20REeume");
request = new RestRequest(Method.POST);
request.AddHeader("Postman-Token", "b339e68d-9257-44eb-8698-1f3f0c86ebfe");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Authorization", "Bearer " + secruityToken.access_token);
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"\"; filename=\"C:\\Users\\jbungay\\Documents\\MyJabberFiles\\ddemchuk#domain.not.set\\3vertical Number 1 Resume.docx\"\r\nContent-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Here is fiddler shows on the postman post. I am new to Fiddler and Postman.
Screen of the inspector from Fidder

Try changing "Postman-Token" to just "token". This worked for me on another project. Keep in mind the request parameters change with every request.

Related

Why does this request works using HttpWebRequest but not with RestSharp?

I am consuming an API that expects a XML in the body request. First i consumed the api via Postman and it worked, then i used that tool of Postman to convert the request to RestCharp C# code, and then using that code the reponse that i was receiving was different compared to postman. After that, i used Fiddler to generate c# code with the postman request, and using that code that fiddler generated i was able to consume the API via code sucessfully. I am just trying to understand what is the difference between the code generated from postman and the code generated from Fiddler.
This is the code that is generated from Fiddler and it works:
HttpWebRequest request =
(HttpWebRequest)WebRequest.Create("http://x.x.x.x.x");
request.Accept = "*/*";
request.KeepAlive = true;
request.Method = "POST";
request.ServicePoint.Expect100Continue = false;
byte[] postBytes = System.Text.Encoding.UTF8.GetBytes(body);
request.ContentLength = postBytes.Length;
Stream stream = request.GetRequestStream();
stream.Write(postBytes, 0, postBytes.Length);
stream.Close();
response = (HttpWebResponse)request.GetResponse();
This is the code generated from Postman (slightly altered, but still the code that was generated from postman didn't work and i don't think that the changes that was made interfered with the result) using RestSharp that doesn't work:
var client = new RestClient("http://x.x.x.x.x");
client.ConfigureWebRequest((r) =>
{
r.ServicePoint.Expect100Continue = false;
r.KeepAlive = true;
});
var request = new RestRequest();
request.AddXmlBody(body);
IRestResponse response = client.Post(request);
return response;
I tried a lot of things in the RestSharp code, like adding a header with different content-types and encoding, for example
request.AddHeader("Content-Type", "text/xml;charset=utf-8");
but nothing worked. The response from the api when consumed by the RestSharp code says it got an error of NPE, which i believe it means NullPointerException, but since the api is working just fine via postman and the code generated by Fiddler, i don't think the problem is in the API. Btw, the parameter body in the code are the exact same in both codes.
It looks like the request body is not matching with expected content type by API. When the content does not match the content type expected by the API then you may get NPE error.
in your fiddler generated code you are sending XML string as text.
Please add the following code:
request.AddHeader("Content-Type", "text/plain");
request.AddParameter("undefined", "<YourXml></YourXml>", ParameterType.RequestBody);
or
request.AddHeader("Content-Type", "application/xml");
request.AddParameter("undefined", "<YourXml></YourXml>", ParameterType.RequestBody);
Instead of
request.AddXmlBody(body);

Postman C# code snippet working on postman and not in app

I have an XML file that is sent as form-data to a remote server. When I use postman, I receive the response that I was supposed to receive.
Postman response
Then I use the code snippet generator to port the call to my C# app, and when I run on the app it does not work.
C# response
The code snippet is:
var client = new RestClient("http://172.20.27.1/xxxxxx/xxxxxx");
var request = new RestRequest(Method.POST);
request.AddHeader("Postman-Token", "1d9df75d-2c8f-4c92-b861-9f4291145846");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"Metas\"; filename=\"C:\\Users\\agufprad\\Desktop\\Pepillo\\FLEX_REMAN_CfgRec_Final_00-00-00-4D_20190311-102223_1010039188_7000AHB.xml\"\r\nContent-Type: application/xml\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Is there anything I am not seeing here?
Can you export + upload the postman collection. That would help a lot.
A couple of things I see off the bat
1) You have a postman token header - why do you need this in C#?
2) Does none multi-part data work?
3) Are you sure content type is supposed to have the boundary data?
4) There is no file associated with the snippet. Pretty sure you can't just AddParameter multi-part data. Look for AddFile, which may be your issue.
5) Does an example off the web work? Currently this looks like it would be a malformed multi-part request
Thanks to everyone for the responses, gave an idea of where to look.
Finally i added a header on the post method request.AddHeader("Accept", "text/plain");
And added the file request.AddFile(fileName, Properties.Settings.Default.SaveRoute + fileName);
Thanks a lot!
I would advice you remove any content-length param, postman-token, cookie param generated from the code generator on Postman, and it should work as its own specific request.
Remove
request.AddHeader("Postman-Token", "1d9df75d-2c8f-4c92-b861-9f4291145846");

File upload to zoho contacts in C#.Net

I'm trying to upload attachments to Zoho CRM contacts using RestSharp but not able to do it. Every time I get response "Bad Request: the request doesn't contain any file". I'm able to upload files to zoho crm contacts using postman but no success through C#.Net application.
I'm using the following code for my C#.Net application. Can you please guide me what wrong I'm doing.
var client = new RestClient("https://www.zohoapis.com/crm/v2/contacts/{contactID}/Attachments");
var request = new RestRequest(Method.POST);
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Authorization", "Zoho-oauthtoken <access-token>");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------`enter code here`WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"; path=\"E:\\10.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Thanks in advance.

How to get results from a Jira Rest API request?

I want to be able to take JSON data that I get from a RestRequest to the Jira Rest API and put that information into a graph. However I am unable to even write the response data to the console. I know what information I should be getting because when I make the request in postman I get a response with the expected data in it.
Here is my code that I generated directly from postman to hopefully replicate what postman is doing inside of visual studio.
How do I get the results from the Jira Rest API request that I am making?
I'm thinking it is a relatively simple fix, but I am just not that familiar with interacting with this API.
var client = new RestClient(myCompanyURL/rest/api/2/issue/NID-3.json");
var request = new RestRequest(Method.GET);
//request.AddHeader("postman-token", "tokenGeneratedFromPostman");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("authorization", "Basic myEncodedInformation");
request.AddHeader("content-type", "application/json");
request.AddParameter("application/json", "{\n\t\"fields\": {\n\t\t\"project\":\n\t\t{\n\t\t\t\"key\":\"NID\"\n\t\t},\n\t\t\"summary\": \"TEST\",\n\t\t\"description\": \"Test Description\",\n\t\t\"issuetype\": {\n\t\t\t\"name\":\"Task\"\n\t\t}\n\t}\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Console.WriteLine(response);

RestSharp code generated form Postman does not work

I am testing the QuickPay API in Postman and everything works fine. When I use the Postman Code Generator to generate a RestSharp snippet of the succesful result, the code does not return a status 200 against the API, and nothing happens.
I have posted the generated code her (altered the auth code though)
var client = new RestClient("http://api.quickpay.net/subscriptions/18612/recurring?Accept-Version=v10&id=18427612&amount=9900&order_id=test1234");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "145e85d9-0e36-4e6a-2742-b36fb3dccadb");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("accept-version", "v10");
request.AddHeader("authorization", "Basic OjczYWY3NzlmZDYzMjIxNGUx33yYj5266ZkO222Z322221M34334433434344ZWY=");
IRestResponse response = client.Execute(request);
Any help is very much appreciated.
Best regards
I found out that instead of posting parameters into the url as querystring parameters, I should post them as parameters into the reqeuest method. No need for the Postman token nor the cache-control headers. And importantly, the url should be https://api.quickpay.net/subscriptions/18612/recurring

Categories