Ocelot - Различный заполнитель в Downstream-Upstream - PullRequest
0 голосов
/ 26 марта 2020

У меня есть API-шлюз (C#, net .Core 3.1, Ocelot), все работает нормально, но сейчас я пытаюсь настроить разные маршруты для восходящего и нисходящего потоков, потому что мой шлюз извлекает информацию во время процесса и отправьте эту информацию в окончательный API.

В апстриме у меня нет заполнителя {userid}, но я хочу, чтобы он был в нисходящем направлении.

Вот мой оцелот. json:

  "DownstreamPathTemplate": "/api/User/{userid}",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "localhost",
      "Port": 44301
    }
  ],
  "UpstreamPathTemplate": "/api/User/",
  "UpstreamHttpMethod": [ "Get" ],

И вот как я добавляю в промежуточное ПО значение заполнителя:

   if (context.DownstreamRequest.OriginalString.Contains("User"))
   {
       context.DownstreamRequest.AbsolutePath = 
       context.DownstreamRequest.AbsolutePath + userid; //this variable is valued before
   }

Итак, чтобы быть более понятным, вот пример:

Меня вызывают по http://localhost: 44358 / api / User / (mygateway Upstream), из некоторых логик я получаю идентификатор пользователя, который сделал этот вызов, например Эндрю, и я хочу перенаправить запрос к моему API http://localhost: 44301 / api / User / Andrew (mygateway Downstream).

Все в порядке, за исключением того, что в моем API идентификатор пользователя появляется как {идентификатор пользователя}, а не имеет значение ID пользователя (Андрей).

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Вы можете реализовать, используя Преобразование претензий особенность Ocelot.

например

"AddQueriesToRequest": {
"LocationId": "Claims[LocationId] > value",
}
0 голосов
/ 27 марта 2020

Мне удалось сделать это с помощью этого кода в конфиге:

"DownstreamPathTemplate": "/api/User/{userid}",
"DownstreamScheme": "http",
"ChangeDownstreamPathTemplate": {
    "userid": "Claims[userId] > value"
  },
"UpstreamPathTemplate": "/api/User/",
...