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

Win10环境下Blazor Web调用Web API连接SQL Server授权问题排查

问题原因分析

你之前修改连接字符串和API地址的操作不解决问题,核心原因是SSL证书信任机制的差异:

  • 浏览器访问HTTPS API正常,要么是你之前手动确认过信任该自签名证书,要么浏览器对本地自签名证书有宽松处理;
  • 而Blazor中使用的HttpClient会严格校验系统证书存储,当API的SSL证书是自签名且未被添加到本地「受信任根证书颁发机构」时,就会抛出UntrustedRoot异常。
解决方案

1. 导出IIS中API站点的SSL证书

  • 打开IIS管理器,找到你的API站点 → 右键「编辑绑定」→ 选中HTTPS绑定 → 点击「编辑」→ 点击「查看证书」;
  • 在证书窗口切换到「详细信息」标签 → 点击「复制到文件」,按照向导导出为.cer格式的证书文件(不需要导出私钥)。

2. 将证书导入到受信任根证书存储

  • 找到导出的.cer文件,右键 → 「安装证书」;
  • 选择「本地计算机」→ 下一步;
  • 选择「将所有证书放入下列存储」→ 点击「浏览」→ 选择「受信任的根证书颁发机构」→ 完成导入。

3. (可选)临时绕过证书校验(仅用于测试/本地开发)

如果只是本地调试不想导入证书,可以在Blazor项目中配置HttpClient跳过证书验证(生产环境绝对禁止):
在Program.cs中添加如下代码:

builder.Services.AddHttpClient("ApiClient", client =>
{
    client.BaseAddress = new Uri("https://localhost:8081/");
})
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
    ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => true
});

然后在Blazor组件中注入命名客户端:

@inject IHttpClientFactory HttpClientFactory

// 在代码中使用
var client = HttpClientFactory.CreateClient("ApiClient");
var response = await client.GetFromJsonAsync<Expedition>("api/Expeditions/1001");

4. 验证效果

重启IIS和Blazor站点,再次访问Blazor页面,应该能正常调用API获取数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 01:17:53