Как вызвать Rest API с контентом и заголовками в c #? - PullRequest
3 голосов
/ 24 марта 2019

Я пытаюсь вызвать Rest API с контентом и заголовками в c #. На самом деле я пытаюсь преобразовать в C # из кода Python, который:

import requests
url = 'http://url.../token'
payload = 'grant_type=password&username=username&password=password'
headers = {
  'Content-Type': 'application/x-www-form-urlencoded'
}
response = requests.request('POST', url, headers = headers, data = payload, allow_redirects=False)
print(response.text)

Пока я пытаюсь:

HttpClient client = new HttpClient();
client.BaseAddress = new Uri(Url);

var tmp = new HttpRequestMessage
{
    Method = HttpMethod.Post,
    Content =
            {

            }
     };

    var result = client.PostAsync(Url, tmp.Content).Result;
}

Я понятия не имею, как поместить из кода Python заголовки (Content-Type) и дополнительную строку (полезную нагрузку).

Ответы [ 3 ]

2 голосов
/ 24 марта 2019
using System.Net.Http;

var content = new StringContent("grant_type=password&username=username&password=password");
content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.PostAsync(Url, content);

Или используйте FormUrlEncodedContent без установленного заголовка

var data = new Dictionary<string, string>
{
    {"grant_type", "password"},
    {"username", "username"},
    {"password", "password"}
};
var content = new FormUrlEncodedContent(data);
client.PostAsync(Url, content);

Если вы пишете приложение UWP, используйте HttpStringContent или HttpFormUrlEncodedContent вместо Windows.Web.Http.dll.

using Windows.Web.Http;

var content = new HttpStringContent("grant_type=password&username=username&password=password");
content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
client.PostAsync(Url, content);

var data = new Dictionary<string, string>
{
    {"grant_type", "password"},
    {"username", "username"},
    {"password", "password"}
};
var content = new FormUrlEncodedContent(data);
client.PostAsync(Url, content);
2 голосов
/ 25 марта 2019

Вот пример, который я использую в одном из моих приложений:

_client = new HttpClient { BaseAddress = new Uri(ConfigManager.Api.BaseUrl), Timeout = new TimeSpan(0, 0, 0, 0, -1) };

      _client.DefaultRequestHeaders.Accept.Clear();
      _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
_client.DefaultRequestHeaders.Add("Bearer", "some token goes here");
2 голосов
/ 24 марта 2019

Если вы используете RestSharp , вы сможете позвонить в службу с помощью следующего кода:

var client = new RestClient("http://url.../token");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddParameter("application/x-www-form-urlencoded", "grant_type=password&username=username&password=password", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
var result = response.Content;

Я основал свой ответ на ответе на этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...