首页 > 解决方案 > 在通过 Http.GetStringAsync 使用 IP 访问的“本地模式”下将 Blazor WebAssembly 与 Azure 函数一起使用时,我收到“无法获取错误”

问题描述

我正在使用以下方法进行本地开发配置:

目标是在本地开发配置中使用 Azure Function 模拟器开发 WebAssembly 应用程序,而不必每次都在 azure 上发布以进行测试......

当我尝试使用http.GetStringAsync()方法从 blazor 应用程序访问虚拟函数时,我在通过 IP 地址访问 func 模拟器时遇到问题,如下所示:

  1. 当使用本地主机从 blazor 应用程序调用时

    Http.GetStringAsync("http://localhost:7071/api/HelloEcho") => localhost ,它有效,我得到了响应

  2. 当使用 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 浏览器中录制它 ==> 它有效,我得到了回应。

  1. 但是当我尝试访问它时,像这样 从 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

标签: blazorwebassembly

解决方案


当您的页面通过 HTTPS 加载但您的异步请求尝试通过 HTTP 进行通信时,会发生混合内容错误。这被视为安全风险

要解决此问题,您可以将两个资源都“升级”到 HTTPS,也可以将两个资源“降级”到 HTTP。

与尝试为 IP 地址设置证书不同,使用 HOSTS 文件可以让您创建测试 dns 条目,这样您就可以完全避免 ip 地址和端口号条目。


推荐阅读