You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Blazor WebAssembly中使用AutoRest客户端遇平台不支持异常求助

解决Blazor WebAssembly中AutoRest生成客户端的PlatformNotSupportedException问题

这个错误的根源很明确:AutoRest默认生成的客户端代码会尝试调用System.Net.WebProxy.CreateDefaultProxy(),但这个API在Blazor WebAssembly的沙箱环境里完全不支持——毕竟浏览器的代理设置是由浏览器本身管理的,.NET的WebProxy类根本没法在WASM环境中生效。

下面是几种实用的解决办法:

方法1:调整AutoRest生成配置,跳过代理代码生成

你可以通过AutoRest的配置参数直接避免生成代理相关逻辑:

  • 如果用命令行生成客户端,添加 --skip-generation-of-proxy-code 参数(具体参数可参考AutoRest官方文档确认,核心是告诉生成器不要处理代理相关代码)
  • 如果你基于OpenAPI/Swagger spec生成,也可以在spec中添加扩展属性,让AutoRest知晓不需要生成代理逻辑

方法2:手动修改生成的客户端代码

如果配置调整不方便,直接修改AutoRest生成的代码是最快速的临时解决方案:

  • 找到生成的客户端类(通常是继承自ServiceClient的类),定位到初始化HttpClientHandler或调用CreateDefaultProxy()的代码块
  • 删除或注释掉所有涉及WebProxy的代码,比如类似这样的片段:
    var proxy = WebProxy.CreateDefaultProxy();
    proxy.Credentials = CredentialCache.DefaultCredentials;
    handler.Proxy = proxy;
    
  • 保存修改后重新编译,此时客户端会使用默认的HttpClientHandler,Blazor WASM会自动适配浏览器的网络环境

方法3:改用Blazor推荐的HttpClient注入方式

AutoRest生成的客户端可能会自行创建HttpClient实例,而Blazor中更推荐通过依赖注入获取HttpClient:

  • 修改生成的客户端构造函数,让它接受一个HttpClient实例作为参数(而非自行创建)
  • 在Blazor项目的Program.cs中注册这个客户端,示例代码:
    builder.Services.AddHttpClient<YourAutoRestClient>(client =>
    {
        client.BaseAddress = new Uri("https://your-api-base-url.com/");
    });
    
  • 在组件中通过依赖注入使用该客户端,这样就能完全绕开手动创建Handler和代理的问题

额外提示

如果你的API需要身份验证,直接在注入的HttpClient中配置请求头即可,无需通过代理处理,示例:

builder.Services.AddHttpClient<YourAutoRestClient>(client =>
{
    client.BaseAddress = new Uri("https://your-api-base-url.com/");
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "your-auth-token");
});

内容的提问来源于stack exchange,提问作者Nikolaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:30:22