Api 调用另一个容器在 blazor wasm 中不起作用

Api call to another container doesn't work in blazor wasm

我有一个项目,其架构如下:

当 blazor webassembly 发布存在于 client_container(nginx alpine 图像)中的输出时,调用 api,它在 api_container,没有任何反应。

而且收不到任何数据。

更糟糕的是,blazor client_container 没有向我提供任何错误。

在我的电脑上打开页面:http://localhost:8081/

运行结果应该是这样的:

但它是这样工作的:

razor 组件中的 API 调用是这样的:

protected override async Task OnInitializedAsync()
{
    // in Debugging
    //people = await Http.GetFromJsonAsync<List<Person>>("http://localhost:8080/api/people");

    // in Publish in Docker
    people = await Http.GetFromJsonAsync<List<Person>>("http://api_container/api/people");
}

这些是 docker 运行 命令:

docker run -p 8080:80 --rm --name api_container --network store_network parsalotfy/store_api
docker run -p 8081:80 --rm --name client_container --network store_network parsalotfy/store_client

为了测试 api 是否可以在 client_container 中访问,我做了这样的测试:

docker exec -it client_container sh

然后在 nginx client_countainer :

/usr/share/nginx/html # curl http://api_container/api/people

这是结果:

奇怪的是 api 可以在 client_container 中访问,但是在 razor 组件中调用 api 失败。

这是 client_container 日志:

如果您有兴趣,可以查看 github 中的所有代码

抱歉,如果太无聊了:)

谢谢。

考虑到这一点,您使用的是像 JavaScript 一样在客户端运行的 Blazor WASM,我应该注意所有请求,包括 api 调用 (/api/people)在客户端浏览器和机器中执行,它们的浏览器无法解析名为 api_container 的主机,因此不出所料,对您的 api 和 api_container 的任何请求都会失败。