Member 13907608 Ответов: 2

Вызов веб-api в коде C# позади


Мне нужно вызвать web APi из кода c# позади. Это моя функция, добавленная в мой код

private async void GetToken()
      {


          using (HttpClient client = new HttpClient())
          {
              var request_json = "your json string";

              HttpContent content = new StringContent(request_json, Encoding.UTF8, "application/json");



              client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Integration", "bhtrdimh=");
              client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

              var httpResponseMessage = await client.PostAsync("https://xxx.xx.com/xx/xx/token", content);
             var r = await httpResponseMessage.Content.ReadAsStringAsync();
           }


      }

После использования этого кода я получаю ошибку

Severity	Code	Description	Project	File	Line	Suppression State
Error	CS1061	'Task<HttpResponseMessage>' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'Task<HttpResponseMessage>' could be found (are you missing a using directive or an assembly reference?)	CheckboxWeb	C:\Project\RogerDev1\CBE\survey-platform\CheckboxWeb\Forms\Surveys\Invitations\NBVUserlink.aspx.cs	194	Active

Я не понимаю, где в моей проблеме.
Может ли кто-нибудь сделать этот тип работы, тогда, пожалуйста, направьте меня с некоторым образцом кода.
Заранее спасибо

Что я уже пробовал:

поиск в google но подходящего ответа не нашел что мне поможет

Vincent Maverick Durano

Какую версию .NET вы используете?

Member 13907608

спасибо за ответ
теперь я меняю свой код
как показано ниже

используя (ВАР клиент = новый система.Нет.Протоколу HTTP.С помощью HttpClient())
{
клиент.BaseAddress = новый Uri("https://xxx.xxx.com");
клиент.DefaultRequestHeaders.Принимать.Четкий();
HttpContent content = new StringContent(request_json, Encoding.UTF8, "application/json");
клиент.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("интеграция", "bmcEpOm0=");
клиент.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

var response = клиент.PostAsync("внешний/xxx/токен", контент).Результат;
если (ответ.IsSuccessStatusCode)
{
строка responseString = ответ.Содержание.ReadAsStringAsync().Результат;
Newtonsoft.В формате JSON.В LINQ.Создание экземпляра в формате JSON = Newtonsoft.В формате JSON.В LINQ.Создание экземпляра.Синтаксический анализ(responseString);

}
}
теперь это возвращение плохой просьбы

Vincent Maverick Durano

Неверный запрос указывает на то, что сервер не смог понять запрос из-за неверного синтаксиса или запрос был неправильно сформирован. Другими словами, поток данных, отправленный клиентом на сервер, не соответствовал правилам. Пожалуйста, дважды проверьте URL-адрес вашей конечной точки.

Member 13907608

Спасибо, проблема решена. Это была моя вина.
На самом деле api принимает get, и я отправляю post . Вот почему получение ошибки

ZurdoDev

Пожалуйста, опубликуйте это решение, чтобы оно больше не оставалось без ответа.

Vincent Maverick Durano

рад, что ты взялся за работу. Пожалуйста, разместите это решение в качестве ссылки для будущих читателей. Спасибо!

2 Ответов

Рейтинг:
15

Member 13907608

в своем коде я использую

var response = client.PostAsync("external/xxx/token", content).Result;

но когда я меняюсь на
var response = client.GetAsync("external/xxx/token", content).Result;


это работа


Рейтинг:
0

abdul shakib

строка apiUrl="http://localhost:36727/api/yourapiclass";

using (var client = new HttpClient())
              {
                  var json = JsonConvert.SerializeObject(YourModel);
                  var stringContent = new StringContent(json, Encoding.UTF8,
                              "application/json");
                  model = client
                                     .PostAsync(apiUrl + "/YourActionName", stringContent)
                                     .Result
                                     .Content.ReadAsAsync<ResponseModel>().Result;
              }