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
相关产品推荐
相关产品推荐

