Неуниверсальный c метод 'HttpClient.GetAsyn c (string)' не может использоваться с аргументами типа - PullRequest
1 голос
/ 10 июля 2020

У меня есть этот код, который регистрирует HttpClient

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();

        services.AddHttpClient("ServerAPI", client =>
            client.BaseAddress = new Uri("http://localhost:xxxxx/"));
    }

, и чтобы использовать его, я ввел его на мою страницу с бритвой Blazor,

@page "/Movies/FetchMovies"
@inject IHttpClientFactory http;
@using System.Text.Json

<MovieList Movies="movies" />

@code{
    private List<Movie> movies;

    protected override async Task OnInitializedAsync()
    {
        var client = http.CreateClient("ServerAPI");        
        movies = await client.GetAsync<List<Movie>>("api/Movies");

        //movies = await client.GetFromJsonAsync<List<Movie>>("api/Movies");
    }
}

Проблема в этой строке movies = await client.GetAsync<List<Movie>>("api/Movies"); появляется ошибка: The non-generic method 'HttpClient.GetAsync(string)' cannot be used with type arguments

Я пробовал с movies = await client.GetFromJsonAsync<List<Movie>>("api/Movies"), но тоже получил ошибку.

Ответы [ 2 ]

2 голосов
/ 10 июля 2020

Если вы wi sh вместо этого используете метод GetFromJsonAsync, сделайте следующее:

  1. Установите пакет System.Net.Http.Json
  2. ссылайтесь на пространства имен: System.Text.Json и System.Net.Http.Json

либо в ваш указанный c файл razor, либо в файл /_Imports.razor.

Теперь этот код выполнит задание ...

movies = await client.GetFromJsonAsync<List<Movie>>("api/Movies"); 
2 голосов
/ 10 июля 2020

Вы должны сделать это так:

@code{
    private List<Movie> movies;

    protected override async Task OnInitializedAsync()
    {
        var client = http.CreateClient("ServerAPI");        
        var response= await client.GetAsync("api/Movies");
        response.EnsureSuccessStatusCode();

        var responseContent = await response.Content.ReadAsStreamAsync();


        movies = await System.Text.Json.JsonSerializer.DeserializeAsync<List<Movie>> 
                      (responseContent,
             new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase });
    }
}

Надеюсь, это поможет ...

...