@inject HttpClient httpClient против builder.Services.AddHttpClient в Blazor
Есть ли причина, по которой у нас нет GetFromJsonAsync
доступный, когда мы используем named HttpClients. Мне пришлось установить NewtonSoftJson, чтобы десериализовать ответ, когда я переключился на Named HttpClients.
Внедрение в компонент Razor
@inject HttpClient httpClient
@code{
public async Task GetProfileAsync()
{
User user = await httpClient.GetFromJsonAsync<User>("user/getprofile/10");
}
}
Введение в сервис / класс
public ProfileViewModel(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task GetProfileAsync()
{
var requestMessage = new HttpRequestMessage(HttpMethod.Get, "user/getprofile/10");
var response = await _httpClient.SendAsync(requestMessage);
var responseBody = await response.Content.ReadAsStringAsync();
User user = JsonConvert.DeserializeObject<User>(responseBody);
}
Спасибо Фахад Мулладжи
2 ответа
Это методы расширения. Просто добавь
using System.Net.Http.Json;
и когда вам нужно (де) сериализовать вручную, предпочитайте System.Text.Json
. Сейчас это стандартный и предпочтительный API.
Есть еще несколько вариантов использования NewtonSoft, но они быстро исчезают.
Добавить using System.Net.Http.Json
для использования методов расширения
Пространства имен:
using System.Net.Http;
using System.Net.Http.Json;
Методы:
public ProfileViewModel(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task GetProfileAsync()
{
User user = await _httpClient.GetFromJsonAsync<User>("user/getprofile/10");
}
public async Task UpdateProfile()
{
await _httpClient.PutAsJsonAsync("user/updateprofile/10", user);
}