Codes DeCodes Ответов: 1

В web api get action call, readasasync() показывает system.missingmethodexception: 'метод не найден: 'system.threading.tasks.task`1<! ! 0> exeption


В моем проекте, я звоню в службу веб-API - получить действие от регулятора очередного проекта. Мой код таков:

using System.Net.Http;
using System.Configuration;
using System.Net.Http.Headers;


public ActionResult Index()
       {
           ViewBag.Place = new SelectList(GetPlaces(), "ID", "PlaceName");

           FlightDetails flightDetails = new FlightDetails();
           flightDetails.DepartureDate = System.DateTime.Now;
           flightDetails.ReturnDate = System.DateTime.Now;
           return View(flightDetails);
       }


private List<tblPlace> GetPlaces()
{
    List<tblPlace> lstPlaces = new List<tblPlace>(); //to be uncommented

    //lstPlaces = TwentyFour7Sewa.Utils.APIEngine<tblPlace>.GetAll("api/fromto");
    using (var client = new HttpClient())
    {
        string apiHost = ConfigurationManager.AppSettings["ApiHost"];
        string apiDirectory = "api/fromto";

        List<tblPlace> result = new List<tblPlace>();
        client.BaseAddress = new Uri(apiHost);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        HttpResponseMessage response = client.GetAsync(apiDirectory).Result;

        if (response.IsSuccessStatusCode)
        {
            result = response.Content.ReadAsAsync<List<tblPlace>>().Result;
            return result;
        }
        else
        {
            return null;
        }
    }

    //lstPlaces = lstPlaces.OrderBy(o => o.PlaceName).ToList<tblPlace>();
    //return lstPlaces;
}


Однако, в соответствии
ViewBag.Place = new SelectList(GetPlaces(), "ID", "PlaceName");
в Index() actionresult я получаю ошибку,
System.MissingMethodException: 'Method not found: 'System.Threading.Tasks.Task`1<!!0> System.Net.Http.HttpContentExtensions.ReadAsAsync(System.Net.Http.HttpContent)'.'


Web api возвращает требуемое значение. Проблема заключается в линии
ReadAsAsync
Я ничего не делал в этой части кода. До вчерашнего дня все шло нормально. Что случилось вдруг, я понятия не имею.

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

Нашел где-то, что мне нужно использовать Microsoft.Net.Http вместо System.Net.Http, так как это устарело. Когда я установил
Microsoft.Net.Http 
из пакета nuget в этом проекте эта библиотека dll не была показана в справочнике проекта.

Bryian Tan

Вы пробовали преобразовать этот метод в асинхронный?

Codes DeCodes

Да, сделал это. Но то же самое исключение..

задача публичных статических асинхронных&ЛТ;список<tblusertype&ГТ;&ГТ; способность()
{
строка apiHost = ConfigurationManager.AppSettings["ApiHost"];
использование (var client = new HttpClient())
{
Список<tblusertype&ГТ; результат = новый список<tblusertype&ГТ;();
клиент.BaseAddress = новый Uri(apiHost);
клиент.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = ожидание клиента.GetAsync("api/UserType");

если (ответ.IsSuccessStatusCode)
{
результат = реакция.Содержание.ReadAsAsync<List<tblusertype>>().результат;
//return Task.FromResult<tblusertype>(результат);
возвращать null;
}
еще
{
возвращать null;
}
}
}

1 Ответов

Рейтинг:
0

Richard Deeming

Этот метод определен в System.Net.Http.Formatting сборка, которая распространяется через NuGet. Смущает то, что имя пакета NuGet-это Microsoft.AspNet.WebApi.Client:

Галерея NuGet | Microsoft.сеть САШ.Веб-API.Клиент 5.2.7[^]

NB: То async преобразование вашего метода не должно вызывать .Result вообще:

public static async Task<List<tblusertype>> GetAll()
{
    string apiHost = ConfigurationManager.AppSettings["ApiHost"];
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(apiHost);
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        
        using (var response = await client.GetAsync("api/UserType"))
        {
            if (!response.IsSuccessStatusCode) return null;
            return await response.Content.ReadAsAsync<List<tblusertype>>();
        }
    }
}

Также: Вы неправильно используете HttpClient и это дестабилизирует ваше программное обеспечение | ASP.NET монстры[^]