Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Add parameters to httpclient

I wrote a HTTP request in Postman and I want to write the same request in my application. There is an option in postman to see the code of the request for C#. In postman it shows request using RestSharp, since I don't want to use external NuGet packages in my project I'm trying to write the same request with objects from .NET Framework.

The RestSharp code looks like this:

var client = new RestClient("https://login.microsoftonline.com/04xxxxa7-xxxx-4e2b-xxxx-89xxxx1efc/oauth2/token");
var request = new RestRequest(Method.POST);       
request.AddHeader("Host", "login.microsoftonline.com");            
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("undefined", "grant_type=password&client_id=6e97fc60-xxx-445f-xxxx-a9b1bbc9eb2d&client_secret=4lS*xxxxxYn%5BENP1p%2FZT%2BpqmqF4Q&resource=https%3A%2F%2Fgraph.microsoft.com&username=myNameHere%402comp.onmicrosoft.com&password=xxxxxxxxxx6", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);

enter image description here

I tried to write the same request with HttpWebRequest:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://login.microsoftonline.com/0475dfa7-xxxxxxxx-896cf5e31efc/oauth2/token");
request.Method = "GET";
request.Referer = "login.microsoftonline.com";
request.ContentType = "application/x-www-form-urlencoded";

request.Headers.Add("grant_type", "password");
request.Headers.Add("client_id", "6e97fc60-xxxxxxxxx-a9bxxxxxb2d");
request.Headers.Add("client_secret", "4lSxxxxxxxxxxxmqF4Q");
request.Headers.Add("resource", "https://graph.microsoft.com");
request.Headers.Add("username", "[email protected]");
request.Headers.Add("password", "xxxxxxxxxxxxx");

HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();

but I'm getting HTML content I think that I need to add the parameters not as header, how can this be achieved?

like image 412
Codey Avatar asked Jun 30 '19 10:06

Codey


People also ask

How to add Parameter in HttpClient?

We can add parameters using String name-value pairs, or utilize NameValuePairs class for that purpose. Similarly, UriBuilder can be used to add parameters to other HttpClient request methods.

What is HttpClient URI?

Class URI. The interface for the URI(Uniform Resource Identifiers) version of RFC 2396. This class has the purpose of supportting of parsing a URI reference to extend any specific protocols, the character encoding of the protocol to be transported and the charset of the document.

What is HttpClient in REST API?

HttpClient class provides a base class for sending/receiving the HTTP requests/responses from a URL. It is a supported async feature of . NET framework. HttpClient is able to process multiple concurrent requests. It is a layer over HttpWebRequest and HttpWebResponse.


1 Answers

I would not use WebRequest if you are able to, rather use HttpClient:

var req = new HttpRequestMessage(HttpMethod.Get, "https://login.microsoftonline.com/0475dfa7-xxxxxxxx-896cf5e31efc/oauth2/token");
req.Headers.Add("Referer", "login.microsoftonline.com");
req.Headers.Add("Accept", "application/x-www-form-urlencoded");
req.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

// This is the important part:
req.Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
    { "grant_type", "password" },
    { "client_id", "6e97fc60-xxxxxxxxx-a9bxxxxxb2d" },
    { "client_secret", "4lSxxxxxxxxxxxmqF4Q" },
    { "resource", "https://graph.microsoft.com" },
    { "username", "[email protected]" },
    { "password", "xxxxxxxxxxxxx" }
});

HttpResponseMessage resp = await httpClient.SendAsync(req);

// Work with resp
like image 104
Tobias Tengler Avatar answered Sep 20 '22 17:09

Tobias Tengler