给httpclient添加参数
Add parameters to httpclient
我在 Postman 中写了一个 HTTP 请求,我想在我的应用程序中写同样的请求。邮递员中有一个选项可以查看 C# 请求的代码。在邮递员中,它显示使用 RestSharp 的请求,因为我不想在我的项目中使用外部 NuGet 包,我试图用 .NET Framework 中的 objects 编写相同的请求。
RestSharp 代码如下所示:
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);
我尝试用 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", "xxxx@xxxxx.onmicrosoft.com");
request.Headers.Add("password", "xxxxxxxxxxxxx");
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
但我得到 HTML 内容我认为我需要添加参数而不是 header,如何实现?
如果可以,我不会使用 WebRequest
,而是使用 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", "xxxx@xxxxx.onmicrosoft.com" },
{ "password", "xxxxxxxxxxxxx" }
});
HttpResponseMessage resp = await httpClient.SendAsync(req);
// Work with resp
我在 Postman 中写了一个 HTTP 请求,我想在我的应用程序中写同样的请求。邮递员中有一个选项可以查看 C# 请求的代码。在邮递员中,它显示使用 RestSharp 的请求,因为我不想在我的项目中使用外部 NuGet 包,我试图用 .NET Framework 中的 objects 编写相同的请求。
RestSharp 代码如下所示:
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);
我尝试用 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", "xxxx@xxxxx.onmicrosoft.com");
request.Headers.Add("password", "xxxxxxxxxxxxx");
HttpWebResponse response = (HttpWebResponse)await request.GetResponseAsync();
但我得到 HTML 内容我认为我需要添加参数而不是 header,如何实现?
如果可以,我不会使用 WebRequest
,而是使用 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", "xxxx@xxxxx.onmicrosoft.com" },
{ "password", "xxxxxxxxxxxxx" }
});
HttpResponseMessage resp = await httpClient.SendAsync(req);
// Work with resp