非泛型方法'HttpClient.GetAsync(string)'不能与类型参数一起使用



我有这个注册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"),但也出现了错误。

如果您希望使用GetFromJsonAsync方法,请执行以下操作:

  1. 安装程序包System.Net.Http.Json
  2. 引用命名空间:System.Text.JsonSystem.Net.Http.Json

或者到您的特定剃刀文件,或者到/_Imports.razor文件。

现在这个代码将工作。。。

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

您应该这样做:

@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 });
}
}

希望这能帮助。。。

相关内容

最新更新