我正在尝试使用 Ocelot 将使用 HttpClient 的 Web 应用程序的请求重定向到在 Docker 中运行的 Asp.Net Core WebAPI。Ocelot 也在容器中运行。两个容器(ProductManagementAPI 和 Ocelot)都是使用 docker-compose 创建的。
下面是我的 ocelot.json 文件:
"ReRoutes": [
{
"DownstreamPathTemplate": "/api/product/product",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "productmanagementapi",
"Port": "8100"
}
],
"UpstreamPathTemplate": "/product/product",
"UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete", "Options" ],
"Priority": 1
}
],
"GlobalConfiguration": {
}
当我直接浏览时运行“docker-compose up”命令后:http://localhost:8100/api/product/product,我得到了所需的响应。
但是,当我从本地运行的 Webapp 发出请求以通过 Ocelot Api 网关(也在容器中运行)从容器中运行的 API 获取响应时,出现以下错误:
ocelotapigateway_1 | requestId:0HLTAOJJEL03J:00000001,previousRequestId:没有以前的请求id,消息:403(禁止)状态码,请求uri:http://productmanagementapi:8100/api/product/product
即使我将 ocelot.json 文件中的下游主机替换为“localhost”,我也会收到错误消息。
我没有在上述任何应用程序中启用授权。
当我使用 WebApplication 中的 HttpClient 直接调用在 docker 中运行的 WebAPI 时,它可以工作。但是当在两者之间放置 Ocelot 网关时,它会停止工作。