C# 对于Blazor客户端应用程序,如何调用服务中的HttpClient

C# 对于Blazor客户端应用程序,如何调用服务中的HttpClient,c#,blazor,blazor-client-side,C#,Blazor,Blazor Client Side,我想从Blazor中的服务进行Http调用,而不是在.razor文件的@code块或代码隐藏中进行调用。我收到错误: Shared/WeatherService.cs(16,17):错误CS0246:找不到类型或命名空间名称“HttpClient”(是否缺少using指令或程序集引用? 文档显示这是如何完成的 复杂的服务可能需要额外的服务。在先 例如,DataAccess可能需要HttpClient默认服务。 @inject(或InjectAttribute)不可在服务中使用。 必须改用构造函数

我想从Blazor中的服务进行Http调用,而不是在
.razor
文件的
@code
块或代码隐藏中进行调用。我收到错误:
Shared/WeatherService.cs(16,17):错误CS0246:找不到类型或命名空间名称“HttpClient”(是否缺少using指令或程序集引用?

文档显示这是如何完成的

复杂的服务可能需要额外的服务。在先 例如,DataAccess可能需要HttpClient默认服务。 @inject(或InjectAttribute)不可在服务中使用。 必须改用构造函数注入。所需服务包括 通过向服务的构造函数添加参数添加。当DI 创建服务时,它会在 构造函数,并相应地提供它们

资料来源:

我如何纠正错误

//WeatherService.cs
使用System.Threading.Tasks;
命名空间MyBlazorApp.Shared
{
公共接口IWeatherService
{
任务获取(十进制纬度、十进制经度);
}
公共类天气服务:IWeatherService
{
公共天气服务(HttpClient HttpClient)
{
...
}
公共异步任务Get(十进制纬度、十进制经度)
{
//做事
}
}
}
//Starup.cs
使用Microsoft.AspNetCore.Components.Builder;
使用Microsoft.Extensions.DependencyInjection;
使用MyBlazorApp.Shared;
名称空间MyBlazorApp
{
公营创业
{
public void配置服务(IServiceCollection服务)
{
services.AddSingleton();
}
公共无效配置(IComponentsApplicationBuilder应用程序)
{
app.AddComponent(“app”);
}
}
}

您缺少使用System.Net.Http的
访问
WeatherService.cs中的类

// WeatherService.cs
using System.Threading.Tasks;
using System.Net.Http; //<-- THIS WAS MISSING

namespace MyBlazorApp.Shared {
    public interface IWeatherService {
        Task<Weather> Get(decimal latitude, decimal longitude);
    }

    public class WeatherService : IWeatherService {
        private HttpClient httpClient;

        public WeatherService(HttpClient httpClient) {
            this.httpClient = httpClient;
        }

        public async Task<Weather> Get(decimal latitude, decimal longitude) {
            // Do stuff
        }

    }
}
//WeatherService.cs
使用System.Threading.Tasks;

使用System.Net.Http// 您可以在startup.cs中配置httpclient

    services.AddHttpClient();
    services.AddScoped<HttpClient>();
services.AddHttpClient();
services.addScope();
现在您可以在.razor文件中使用HttClient

@inject HttpClient httpClient

-------------

private async Task LoadSystems() => systemsList = await httpClient.GetJsonAsync<List<Models.Systems>>("Systems/GetSystems");
@inject-HttpClient-HttpClient
-------------
私有异步任务LoadSystems()=>systemsList=wait-httpClient.GetJsonAsync(“Systems/GetSystems”);

您缺少使用System.Net.Http的
要访问
WeatherService.cs中的类,请明确客户端或服务器端Blazor,对于HttpClient,存在一些细微的差异。@Henkholtman您能详细说明您的要求吗?如果我明白你的意思,我的问题的标题中会特别提到“客户方”。我错过什么了吗?不,我只是错过了标题中的那个。正在查看文本和标记。不幸的是,这并没有改变错误。此外,文档应说明如果确实如此。@dapperdan1985如果使用类的全名
System.Net.Http.HttpClient
不起作用,则肯定缺少对程序集的引用。使用System.Net.Http添加
是所需的全部内容。当这不起作用时,项目以其他方式遭到破坏。Visual Studio显示存在其他错误,但使用
dotnet build
构建只显示
…找不到HttpClient…
错误。使用VisualStudio(与VS代码相反)可以更有效地发现真正的错误。我想我应该不那么固执,在Windows而不是Ubuntu上开发,这样我就可以拥有完整的Visual Studio:)@dapperdan1985很高兴你找到了解决方案。快乐编码。