blazor - 在通过 Http.GetStringAsync 使用 IP 访问的“本地模式”下将 Blazor WebAssembly 与 Azure 函数一起使用时,我收到“无法获取错误”
问题描述
我正在使用以下方法进行本地开发配置:
- Azure Function 通过 Visual Studio 的本地func模拟器
- 通过Blazor WebAssembly访问(通过本地 IIS express)。
目标是在本地开发配置中使用 Azure Function 模拟器开发 WebAssembly 应用程序,而不必每次都在 azure 上发布以进行测试......
当我尝试使用http.GetStringAsync()
方法从 blazor 应用程序访问虚拟函数时,我在通过 IP 地址访问 func 模拟器时遇到问题,如下所示:
当使用本地主机从 blazor 应用程序调用时
Http.GetStringAsync("http://localhost:7071/api/HelloEcho") => localhost ,它有效,我得到了响应
当使用 localhost 或 IP 地址从 Chrome 或 Edge 客户端访问 func api 时,例如在浏览器或远程设备中键入:
http://localhost:7071/api/HelloEcho => it works http://xxx.xxx.xxx.xxx:7071/api/HelloEcho => remote, it works
我什至尝试http://xxx.xxx.xxx.xxx:7071/api/HelloEcho
在连接到同一网络的手机上的 safari 浏览器中录制它 ==> 它有效,我得到了回应。
- 但是当我尝试访问它时,像这样
从 blazor 应用程序
Http.GetStringAsync("http://xxx.xxx.xxx.xxx:7071/api/HelloEcho")
中通过其 IP 替换 localhost => 我收到一条错误消息
WebAssembly.JSException:TypeError:无法在 System.Net.Http.WebAssemblyHttpHandler.doFetch 获取
如果它在浏览器中工作,为什么不在http.Get
应用程序中使用?我该怎么做才能让它工作?
注意:在函数主机中,为 CORS 添加了参数:*
Visual Studio 版本 16.6.0 预览版 6.0
Azure Functions 核心工具(3.0.2534 提交哈希:bc1e9efa8fa78dd1a138dd1ac1ebef97aac8d78e)函数运行时版本:3.0.13353.0
WebAssembly 3.2.0-rc1.20223.4
解决方案
当您的页面通过 HTTPS 加载但您的异步请求尝试通过 HTTP 进行通信时,会发生混合内容错误。这被视为安全风险
要解决此问题,您可以将两个资源都“升级”到 HTTPS,也可以将两个资源“降级”到 HTTP。
与尝试为 IP 地址设置证书不同,使用 HOSTS 文件可以让您创建测试 dns 条目,这样您就可以完全避免 ip 地址和端口号条目。
推荐阅读
- powershell - 使用 SDK 同步 Analysis Services 表格模型
- python - 如何从python中的给定范围生成随机唯一的两个数字集
- swift - 为什么这个脉动动画会移动 x 和 y 位置?
- java - 设计编辑器在项目同步成功之前不可用
- javascript - 启动 jquery 函数时出现 componentDidMount() 问题 - React
- node.js - 如何创建一个 Node.js 服务,在请求时下载页面内容并返回结果?
- python - Pandas - 每个周期后重置 CUMSUM
- rest - Sharepoint RequestDigest 被解释为 cURL 中的参数
- python - 无法使用 docker 容器运行 django 应用程序
- java - 多次从方法返回值