@inject HttpClient 与 @using System.Net.Http 之间的问题;在查看页面

Posted

技术标签:

【中文标题】@inject HttpClient 与 @using System.Net.Http 之间的问题;在查看页面【英文标题】:Question Between @inject HttpClient vs @using System.Net.Http; on view page 【发布时间】:2020-11-11 19:03:07 【问题描述】:

那么@using System.Net.Http 有什么不同;您在哪里创建对象并调用该方法@inject HttpClient Http 之间有什么不同所以我正在尝试学习 Blazor

有人能解释一下这个工作的区别吗

 @using System.Net.Http;
@code 
    private WeatherForecast[] forecasts;
  
        protected override async Task OnInitializedAsync()
        
            var Http = new HttpClient();
            forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
        

@page "/fetchdata"
@inject HttpClient Http


    @code 
        private WeatherForecast[] forecasts;
    
        protected override async Task OnInitializedAsync()
        
            forecasts = await Http.GetFromJsonAsync<WeatherForecast[]>("sample-data/weather.json");
        

【问题讨论】:

【参考方案1】:

当您使用var Http = new HttpClient(); 时,您会创建一个包含 HttpClient 类型实例的局部变量。

当您使用 @inject HttpClient Http 时,您告诉 Blazor 创建 HttpClient 服务的实例并将其分配给名为 Http 的属性。

不推荐上述第一种用法。你应该总是注入你的对象而不是实例化它们。注入对象由依赖注入系统创建,该系统创建您的对象、控制其生命周期以及您可以在有关依赖注入的文档中了解的许多其他好处。

【讨论】:

谢谢:) :) :)

以上是关于@inject HttpClient 与 @using System.Net.Http 之间的问题;在查看页面的主要内容,如果未能解决你的问题,请参考以下文章

如何使用HttpClient访问响应头? [重复]

如何使用 HttpClient 在 Web api 中传递标头值

如何在 Typescript 类中创建 Angular 5 HttpClient 实例

USI 网络服务 SOAP 格式

Button按钮--inject与provide

JSF 2.3 与 Spring 4.3 @Inject @ManagedProperty 问题