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
的任何请求都会失败。
我有一个项目,其架构如下:
当 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
的任何请求都会失败。