c# - 加载 Blazor 客户端应用程序时如何避免浏览器中的 System.TypeLoadException 未处理异常

标签 c# webassembly blazor blazor-client-side

我有一个客户端 Blazor 应用程序,当我尝试运行它以从 Visual Studio 2019 16.3.0 Preview 2.0 进行调试时,我在 Chrome 浏览器中收到此错误消息(在使用 Shift-Alt-D 进行调试时看到):

blazor.webassembly.js:1 WASM: System.TypeLoadException: 无法使用 typeref 中的 token 01000020 解析类型(程序集 'Microsoft.AspNetCore.Blazor 中的预期类 'Microsoft.AspNetCore.Blazor.HttpClientJsonExtensions',版本 = 0.7。 0.0, Culture=neutral, 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呢?或者我有哪些选择?

编辑:

我正在构造函数中使用依赖注入(inject)创建 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;
    }
}

依赖是从我的启动类中注入(inject)的

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpClient();
        services.AddTransient<IServiceProxy, ServiceProxy>();
    }
}

最佳答案

我已经找到了这个问题的根本原因,从而找到了解决办法。

我将我的 Visual Studio 2019 升级到 16.4.0 Preview 1.0,然后出现了一些问题,之前没有问题。 在整合我的 NuGet 依赖项时,令我感到非常惊讶的是,我的一个 .NET Standard 依赖项项目实际上引用了 Blazor 0.7.0,它比我升级的 Preview 8 版本旧。

这个引用可能是我痛苦的原因! 删除该引用后,我无法再调用我的 httpClient.PutJsonAsync 和 httpClient.GetJsonAsync,因为这可能仅在 HttpClient 的 Blazor 版本中实现。

我重写了我的库以使用 httpClient.PutAsync 和 httpClient.GetAsync 并使用 Newtonsoft.Json 进行序列化和反序列化。在另外修复了一些 CORS 问题后,它起作用了。

关于c# - 加载 Blazor 客户端应用程序时如何避免浏览器中的 System.TypeLoadException 未处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57580023/

相关文章:

c# - 事件处理程序 : What is going on in this code?

Emscripten - 如何从 C 到 JavaScript 获取 uint8_t 数组?

javascript - 在WASM-Bindgen Rust中创建带有鼠标输入事件关闭事件的回调时发生关闭事件调用错误

c# - Blazor - 将参数传递给父级

Blazor 组件与 tailwind/postcss 隔离的 css

c# - ASP.NET MVC - 两个应用程序之间的相同身份验证

c# - 整理 if 语句 - 未实例化的对象是否可以在 AND 运算符中

c# - VS 代码 CSC : error CS1617: Invalid option '7.3' for/langversion

c# - EF Core 2.1 - 如何映射具有相同类型的多对多

javascript - 我应该以哪种格式将图像从 Rust 传递到 JS?