如何将Blazor应用连接至Aspire 9.1无服务器SignalR模拟器
解决Aspire 9.1无服务器SignalR模拟器的混合内容错误
问题原因
你的Blazor应用通过HTTPS(https://localhost:7164)加载,但Aspire默认启动的SignalR模拟器使用HTTP地址(http://0.0.0.0:8888),浏览器的混合内容策略会拦截这种跨协议请求,导致报错。
解决方案
1. 为Aspire的SignalR模拟器启用HTTPS
修改AppHost的Program.cs配置,在SignalR模拟器的构建链中添加WithHttps():
var signalr = builder .AddAzureSignalR("signalr", AzureSignalRServiceMode.Serverless) .RunAsEmulator() .WithHttps(); // 启用HTTPS var hub = builder .AddAzureFunctionsProject<Projects.Entries_Hub>("hub") .WithReference(signalr) .WaitFor(signalr) .WithExternalHttpEndpoints() .WithHostStorage(storage);
2. 确认连接字符串自动更新
启动Aspire后,SignalR模拟器会输出HTTPS格式的连接字符串,Aspire会自动将这个HTTPS连接字符串注入到你的Azure Functions项目中,无需手动修改Negotiate方法代码。
3. 信任开发证书(若出现证书错误)
如果浏览器提示证书不受信任,运行以下命令信任.NET开发HTTPS证书:
- Windows:
dotnet dev-certs https --trust - macOS:
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/.aspnet/https/aspnetapp.pfx
补充说明
手动启动SignalR模拟器时正常,是因为你可能手动配置了HTTPS,或者当时Blazor应用使用HTTP运行,不存在跨协议请求冲突。Aspire默认给Blazor应用启用HTTPS,但SignalR模拟器默认用HTTP,因此需要显式为模拟器开启HTTPS来匹配协议。
内容的提问来源于stack exchange,提问作者Thor
相关产品推荐
相关产品推荐

