我有这个注册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
方法,请执行以下操作:
- 安装程序包
System.Net.Http.Json
- 引用命名空间:
System.Text.Json
和System.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 });
}
}
希望这能帮助。。。