我有一个客户端 Blazor 应用程序,当我尝试从 Visual Studio 2019 16.3.0 Preview 2.0 运行它进行调试时,我在 Chrome 浏览器中收到此错误消息(使用 Shift-Alt-D 调试时看到):
blazor.webassembly.js:1 WASM: System.TypeLoadException: 无法从 typeref 解析带有令牌 01000020 的类型(程序集“Microsoft.AspNetCore.Blazor,版本 = 0.7.0.0,文化中的预期类“Microsoft.AspNetCore.Blazor.HttpClientJsonExtensions” =中性,PublicKeyToken=adb9793829ddae60')
我已经尽早在 Program.cs 的 Main 中设置了一个断点,但这并没有受到影响。
我正在使用 Blazor 版本 3.0.0-preview8.19405.7。我一直在寻找解决这个问题的方法,但所有文章似乎都解决了我以外的其他问题。
这个问题似乎是关于 Json 和 HttpClient 的,所以我认为它可能与升级有关,因为它在过程中提到: https ://devblogs.microsoft.com/aspnet/asp-net-core-and- blazor-updates-in-net-core-3-0-preview-8/
但实际上我在升级之前并没有成功使用 Json(它正在开发中),所以我不确定它是否与此有关。
编辑:我试图从代码中删除这两行(但在项目文件中保留了对 Microsoft.AspNetCore.Blazor.HttpClient 的引用):
result = await httpClient.GetJsonAsync<bool>("uri");
和
await httpClient.PutJsonAsync("uri", value);
这解决了这个问题,但会导致我没有对我的后端进行任何调用。
那么如何使用httpClient呢?或者我有哪些选择?
编辑:
我在构造函数中使用依赖注入创建 httpClient
public class ServiceProxy : IServiceProxy
{
private readonly HttpClient httpClient;
public ServiceProxy(IHttpClientFactory httpClientFactory)
{
httpClient = httpClientFactory.CreateClient();
httpClient.BaseAddress = new Uri("https://localhost:12345"), UriKind.Absolute);
}
public async Task<bool> GetResultAsync()
{
bool result
try
{
result = await httpClient.GetJsonAsync<bool>("resource");
}
catch (HttpRequestException httpRequestException)
{
throw new ConnectionException(string.Format("Http Request failed: {0}", httpRequestException.Message), httpRequestException);
}
return result;
}
}
依赖项是从我的启动类中注入的
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpClient();
services.AddTransient<IServiceProxy, ServiceProxy>();
}
}