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);
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?
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.
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.
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With