Решение Net Core «Не содержит определения для ошибки содержимого» и чтение в API-интерфейсе как строка - PullRequest
0 голосов
/ 21 сентября 2018

Я получаю сообщение об ошибке ниже.Один из способов решить эту проблему - переместить код в контроллер.Если я не хочу размещать в контроллере и создавать простое консольное приложение, как бы я мог устранить ошибку, указанную ниже, при чтении в виде строки?

    static void Main()
    {

        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://api.openweathermap.org");
        var response = client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60&units=metric");

        // This line gives me error
        var stringResult = response.Content.ReadAsStringAsync();  

Ошибка: Несодержит определение «Content», и нет доступного метода расширения «Content», принимающего первый аргумент типа «Task» (вы пропустили директиву using или ссылку на сборку?)

1 Ответ

0 голосов
/ 21 сентября 2018

Асинхронные методы возвращают Task объектов.В среде IDE правильно сказано, что Task не содержит определения для Content.

Вам следует await выполнить задачи, изменив свой код так:

var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60&units=metric");
var stringResult = await response.Content.ReadAsStringAsync(); 

Await будет ожидать завершения задачи (важно) и распаковать результат (т.е. развернуть его из объекта Task).

Далее, ваша проблема в том, что static void Main() неasync метод, поэтому ключевое слово await недопустимо.Это можно решить, выполнив следующие действия:

  1. В обозревателе решений щелкните правой кнопкой мыши свой проект и выберите «Изменить NAME.csproj»
  2. Найдите что-то похожее на <TargetFramework>netcoreapp2.1</TargetFramework>
  3. Под этой строкой добавьте <LangVersion>7.1</LangVersion> - это заставит VS и компилятор проверить ваш код / ​​скомпилировать ваш код в соответствии с правилами C # 7.1 ( самая ранняя языковая версия, в которой были добавлены асинхронные методы Main ).
  4. Измените Main() подпись на static async Task Main()

Окончательный код:

static async Task Main()
{

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://api.openweathermap.org");
    var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid=c44d8aa0c5e588db11ac6191c0bc6a60&units=metric");

    // This line gives me error
    var stringResult = await response.Content.ReadAsStringAsync();  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...