是否有 .cs 文件相当于 .razor 文件的 @inject HttpClient Http

Wou*_*erd 1 c# razor webassembly blazor

在我使用的 .razor 文件中

@inject HttpClient Http
Run Code Online (Sandbox Code Playgroud)

访问 HTTPClient。

有没有办法在 .cs 文件中执行相同的操作,或者我是否必须将其作为参数传递?

更新

我以为我有,但我没有。

使用语句

@inject HttpClient Http
Run Code Online (Sandbox Code Playgroud)

定义为类参数

using System.Net.Http;
using Microsoft.AspNetCore.Components;
using System.Net.Http.Json;
Run Code Online (Sandbox Code Playgroud)

在我的通话任务中

    [Inject]
    protected HttpClient Http {get;set;} 
Run Code Online (Sandbox Code Playgroud)

出现以下错误

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

Uma*_*air 5

我建议你用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

Run Code Online (Sandbox Code Playgroud)

您可以在服务或存储库类中使用它进行注入:

public class BasicService : IBasicService
{
    private readonly IHttpClientFactory _httpClientFactory;

    public BasicUsageModel(IHttpClientFactory httpClientFactory) // <- inject here
    {
        _httpClientFactory = httpClientFactory;
    }
Run Code Online (Sandbox Code Playgroud)

或者如果其剃刀页面代码落后:

[Inject] public IHttpClientFactory HttpClientFactory { get; set; }
Run Code Online (Sandbox Code Playgroud)

或者如果它的剃刀页面是这样的:

@inject IHttpClientFactory HttpClientFactory
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

var httpClient = _clientFactory.CreateClient(); // <- create HTTP client
Run Code Online (Sandbox Code Playgroud)