postman-code-generators icon indicating copy to clipboard operation
postman-code-generators copied to clipboard

Add in C# HttpClient code generation

Open justindbaur opened this issue 3 years ago • 0 comments

Fixes #452

This PR adds a C# code gen that does not rely on any 3rd party libraries. The core item it uses is HttpClient for making the call.

Some examples of it's code gen are below:

GET Request with headers:

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://postman-echo.com/headers");
request.Headers.Add("my-sample-header", "Lorem ipsum dolor sit amet");
request.Headers.Add("TEST", "@#$%^&*()");
request.Headers.Add("more", ",./';[]}{\":?><|\\\\");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

Simple GET

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://postman-echo.com/get?test=123&anotherone=232");
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

Plaintext POST

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://postman-echo.com/post");
var content = new StringContent("Duis posuere augue vel cursus pharetra. In luctus a ex nec pretium. Praesent neque quam, tincidunt nec leo eget, rutrum vehicula magna.\nMaecenas consequat elementum elit, id semper sem tristique et. Integer pulvinar enim quis consectetur interdum volutpat. !@#$%^&*()_+-=,.<>/?", null, "text/plain");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

JSON POST

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://postman-echo.com/post");
var content = new StringContent("{\n  \"json\": \"Test-Test\"\n}", null, "application/json");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

Url Encoded POST

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://postman-echo.com/post");
var collection = new List<KeyValuePair<string, string>>();
collection.Add(new("1", "'a'"));
collection.Add(new("2", "\"b\""));
collection.Add(new("'3'", "c"));
collection.Add(new("\"4\"", "d"));
collection.Add(new("Special", "!@#$%*()^_=`&~              "));
collection.Add(new("more", ",./';[]}{\":?><|\\\\    "));
collection.Add(new("non-ascii", "테스트"));
var content = new FormUrlEncodedContent(collection);
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

Form with files

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://postman-echo.com/post");
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.OpenRead("./dummyFile1.txt")), "single file", "./dummyFile1.txt");
content.Add(new StreamContent(File.OpenRead("./dummyFile2.txt")), "multiple files", "./dummyFile2.txt");
content.Add(new StreamContent(File.OpenRead("./dummyFile3.txt")), "multiple files", "./dummyFile3.txt");
request.Content = content;
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());

justindbaur avatar Feb 11 '21 01:02 justindbaur