Существует ли эквивалент файла .cs для файла .razor @inject HttpClient Http

#c# #razor #blazor #webassembly

Вопрос:

в файле .razor я использую

 @inject HttpClient Http
 

чтобы получить доступ к HttpClient.

Есть ли способ сделать то же самое в файле .cs или мне нужно передать его в качестве параметра?

Обновить

Я думал, что у меня это есть, но это не так.

Использование операторов

 using System.Net.Http;
using Microsoft.AspNetCore.Components;
using System.Net.Http.Json;
 

определяется как параметр класса

     [Inject]
    protected HttpClient Http {get;set;} 
 

в моей задаче вызова

     await  Http.GetFromJsonAsync<SharedGLAccount[]>($"api/{ST_comp}/GLAccounts")
 

появляется следующая ошибка

 Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]
      Unhandled exception rendering component: Value cannot be null. (Parameter 'client')
 

Комментарии:

1. в cs-файле вы делаете HttpClient client = new HttpClient(); , а затем вызываете методы для client объекта.

2. Проверьте Инъекцию зависимости

3. да, спасибо, я думаю, что нашел его, я добавлю ответ, как только проверю

Ответ №1:

Я предлагаю вам использовать IHttpClientFactory для этого. Ознакомьтесь с этой документацией, которая объясняет преимущества ее использования, а также скопирована ниже:

  • Обеспечивает центральное расположение для именования и настройки логических HttpClient экземпляров. Например, клиент с именем github может быть зарегистрирован и настроен для доступа к GitHub. Клиент по умолчанию может быть зарегистрирован для общего доступа.
  • Кодифицирует концепцию исходящего промежуточного программного обеспечения путем делегирования обработчиков HttpClient . Предоставляет расширения для промежуточного программного обеспечения на основе Polly, позволяющие использовать преимущества делегирования обработчиков HttpClient .
  • Управляет объединением и временем жизни базовых HttpClientMessageHandler экземпляров. Автоматическое управление позволяет избежать распространенных проблем DNS (системы доменных имен), возникающих при ручном управлении HttpClient временем жизни.
  • Добавляет настраиваемый интерфейс ведения журнала (через ILogger ) для всех запросов, отправляемых через клиентов, созданных фабрикой.

Примером использования является:

В файле startup.cs:

 public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpClient(); // <- add this

 

Вы можете внедрить это с помощью класса службы или репозитория:

 public class BasicService : IBasicService
{
    private readonly IHttpClientFactory _httpClientFactory;

    public BasicUsageModel(IHttpClientFactory httpClientFactory) // <- inject here
    {
        _httpClientFactory = httpClientFactory;
    }
 

или это, если его код страницы бритвы за:

 [Inject] public IHttpClientFactory HttpClientFactory { get; set; }
 

или это, если его страница razor:

 @inject IHttpClientFactory HttpClientFactory
 

И используйте его вот так:

 var httpClient = _clientFactory.CreateClient(); // <- create HTTP client
 

Комментарии:

1. Спасибо за подробное объяснение! Целесообразно ли создавать новые для каждого звонка? или лучше использовать повторно?