1

我正在尝试使用 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 网关时,它会停止工作。

4

0 回答 0