@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);
}
Другие вопросы по тегам