HttpClient 设置基地址不起作用依赖注入

问题描述 投票:0回答:1

您好,所以我尝试使用 httpclient 添加我的 api 作为依赖项注入,并更改 program.cs 文件中的基地址,这里是将其添加到容器的代码。我找到了与此相关的其他帖子并关注了他们,但没有一个起作用,并且想知道我是否在这里做了完全错误的事情。尝试了解注射的工作原理。谢谢你。

builder.Services.AddHttpClient("ProductApi", client =>
{
    client.BaseAddress = new Uri("https://localhost:7023/api/");
});

这是 blazor 组件内部的代码

    private async Task GetProduct()
    {
       // ProductApi.BaseAddress =  new Uri ("https://localhost:7023/api/");
        HttpResponseMessage response = await ProductApi.GetAsync("Product");

            if (response.IsSuccessStatusCode)
            {
                var responseData = await response.Content.ReadFromJsonAsync<List<ProductModel>>();
                products = responseData;
            } 
     
    }

我尝试查找有关此问题的视频和其他帖子。没有一个对我有用,我也在顶部的 blazor 代码中 @inject HttpClient ProductApi

c# dependency-injection blazor httpclient
1个回答
0
投票

是的,你做错了什么。要使用 HTTP 客户端,您可以使用“类型化客户端”或“命名客户端”。您在这里使用命名客户端,因为您使用字符串 ProductApi 注册客户端,但您似乎想像使用类型客户端一样使用它。 使用命名客户端时,您必须注入

IHttpClientFactory
,并且每当您需要

HttpClient

调用

_httpClientFactory.CreateClient("ProductApi")
时,它都会为您提供使用
HttpClient
配置的客户端实例(类型为
AddHttpClient("ProductApi", ...)
)。
这是 Microsoft 提供的示例:
public class NamedClientModel : PageModel
{
    private readonly IHttpClientFactory _httpClientFactory;

    public NamedClientModel(IHttpClientFactory httpClientFactory) =>
        _httpClientFactory = httpClientFactory;

    public IEnumerable<GitHubBranch>? GitHubBranches { get; set; }

    public async Task OnGet()
    {
        var httpClient = _httpClientFactory.CreateClient("GitHub");
        var httpResponseMessage = await httpClient.GetAsync(
            "repos/dotnet/AspNetCore.Docs/branches");

        if (httpResponseMessage.IsSuccessStatusCode)
        {
            using var contentStream =
                await httpResponseMessage.Content.ReadAsStreamAsync();
            
            GitHubBranches = await JsonSerializer.DeserializeAsync
                <IEnumerable<GitHubBranch>>(contentStream);
        }
    }
}

有关示例的原始来源和更详细的说明,请参阅

Microsoft Docs - 在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求

© www.soinside.com 2019 - 2024. All rights reserved.