【发布时间】:2021-03-01 00:31:11
【问题描述】:
所以我来自 Xamarin 世界,试图构建一个 Blazor 应用程序。而且我正在努力理解为什么 Blazor 应用程序(仅限客户端)无法进行基本的 HTTP get 调用来说 google.com 或任何其他 http get/post 调用到不同的资源/url?
谁能帮我分析一下,我疯了吗?我将如何实现 maps.google.com 或其他我需要发出的 http 请求。
我确实注意到任何带有包的东西,例如 SendGrid 或 B2C 或 Cosmos Nuget 包似乎都可以正常工作......它们如何绕过不同的域名?
我能否在我的网络服务器上简单地说:(英文)- 允许向 google.com 和 someoneElsesApi.com 发出请求 还是我必须联系谷歌并让他们允许我的 Blazor 应用拨打电话?
如果 Blazor Client Only PWA 应用程序无法连接或调用网络上的其他任何东西,那么它真的很挣扎......如果 Blazor 应用程序无法对其他服务进行任何 http 调用,这似乎毫无意义。
【问题讨论】:
-
您不能向不受您控制的服务器发出请求。如果浏览器可以通过代码调用世界上的任何服务器,那将是一个主要的安全问题。查找 CORS 及其重要性。
-
您应该能够使用 HttpClient 调用第三方公共 Web API 端点。 This documentation from Microsoft 展示了如何使用您自己的主机创建 HttpClient,但您应该能够将其用于任何第三方。到目前为止,您尝试过什么?
-
我确实阅读了 Cors,显然不足以让我理解为什么浏览器与我可以使用的任何其他应用程序如此不同。在控制台应用程序中,我可以在 google.com 上使用 HTTP 请求并获得响应……在 Blazor(或我猜是浏览器)中,这是一个巨大的安全问题……为什么会有差异?
-
正如 Andy 提到的,将 CORS 添加到我自己的 API 允许从我的 Blazor 应用程序访问...但我不能去要求其他 3rd 方 API 将我的域添加到他们的 CORS Lex - 我阅读了链接并看到“HttpClient and JSON helpers are also used to call third-party web API endpoints..”这一行。也许我看的不正确,但那段或文章中没有其他内容讨论第三方 API ......我认为该行只是一种注释应该遵循工作(想不出要测试的示例 api)? HttpClient c = new HttpClient();等待 c.GetFromJsonAsync("Some-allow-annonymus-3rdPartyAPI-URL");
-
@John Blazor WASM 本身不会进行任何 HTTP 调用,浏览器会这样做。所有浏览器都被构建为拒绝连接到未通过 CORS 策略指定的任何端点。将 Xamarin Forms 之类的桌面应用程序与在浏览器中运行的 SPA(这就是 Blazor WASM)进行比较只会让您感到困惑。您应该将其与其他 SPA 框架进行比较,例如 React、Vue 或纯 JavaScript
标签: asp.net-core cors blazor webassembly .net-5