将 HttpClient 注入 Razor class 库中的 Blazor 组件

Injecting an HttpClient into a Blazor Component in a Razor class library

我从 Blazor WebAssembly 模板创建了一个解决方案,我在其中勾选了 ASP.NET Core hosted 复选框,所以我有 ClientServerShared 项目解决方案。

为此解决方案我添加了一个名为 BlogsRcl 的 Razor class 库(没有选中“支持页面和视图”),其中我有一个名为 Blogs.razor.

的 Blazor 组件

我希望能够将 HttpClient 注入到我的 Blogs.razor 组件中,就像 'Client` project has, i.e. '@inject HttpClient Http' 中的 FetchData.razor 组件一样。

在我的 BlogsRcl 项目的“.csproj”文件中,我添加了 either/or/both 对

的引用
<PackageReference Include="Microsoft.Extensions.Http" Version="5.0.0.0" />
<PackageReference Include="System.Net.Http" Version="5.0.0" />

其中,Microsoft.Extensions.Http 的一切都符合标准,但是当我添加 System.Net.Http 时,解决方案中的每个项目都抱怨它是 Unable to find package System.Net.Http with version (>= 5.0.0)

然而,当我在 Client 项目的 FetchData.razor 组件中对 HttpClient 执行 Go To Definition 时,元数据显示 Assembly System.Net.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.

编辑: 我也尝试添加 <PackageReference Include="System.Net.Http.Json" Version="5.0.0" />,但无济于事。

我错过了什么?

RCL (<Project Sdk="Microsoft.NET.Sdk.Razor">) 不需要任何这些包引用,因为所需的包引用是框架的一部分。在 Visual Studio 中,您可以通过展开 Project/Depedencies/Frameworks/Microsoft.NETCore.App/.

查看框架中包含的内容

但是您必须确保还添加了所需的 using 指令。 要么将它们添加到 .razor-文件的顶部,或者对于此类通用用途更好,将它们添加到 _Imports.razor-文件。

@using System.Net.Http
@using System.Net.Http.Json