Ocelot не находит файлы перенаправления - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь построить свою собственную архитектуру микро-сервисов и застрял в части API.Gateway. Я пытаюсь заставить Ocelot V14 найти всю конфигурацию ocelot. json или конфигурацию. json в файле .sln .

Solution File Set up

В файле Program.cs Я пытаюсь объединить файлы конфигурации со следующим кодом по этой ссылке https://ocelot.readthedocs.io/en/latest/features/configuration.html#react - to-configuration-changes

builder.ConfigureServices(s => s.AddSingleton(builder))
             .ConfigureAppConfiguration((hostingContext, config) =>
             {
                 config
                     .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
                     .AddJsonFile("appsettings.json", true, true)
                     .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json", true, true)
                     .AddOcelot(hostingContext.HostingEnvironment)
                     .AddEnvironmentVariables();
             })
            .UseStartup<Startup>();

При запуске этого приложения создается следующий ocelot. json файл внутри моего OcelotApiGw Project

{
  "ReRoutes": [
  ]
}

Проблема в том, что он пуст и перенаправления не работают. Когда я вставляю нужные перенаправления в этот файл ocelot. json, перенаправления работают, это не та функциональность, которую я хочу.

Я хочу автоматически объединить файл конфигурации из различные . json файлы.

Любая помощь будет принята с благодарностью.

Как eShopOnContainers реализует ее таким образом с Ocelot V12

        IWebHostBuilder builder = WebHost.CreateDefaultBuilder(args);
        builder.ConfigureServices(s => s.AddSingleton(builder))
            .ConfigureAppConfiguration(ic => ic.AddJsonFile(Path.Combine("configuration", "configuration.json")))
            .UseStartup<Startup>();

Если вам нужно больше кода, файловых структур или чего-либо еще, просто прокомментируйте и спросите.

1 Ответ

0 голосов
/ 15 марта 2020

Не уверен, что это то, что вы ищете? Так Ocelot объединяет несколько файлов маршрутизации

https://ocelot.readthedocs.io/en/latest/features/configuration.html#merging -configuration-files

Мы не используем это, но так мы определили наш запуск :

var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddJsonFile(this.env.IsDevelopment() ? "ocelot.json" : "ocelot.octopus.json")
                .AddEnvironmentVariables();

Итак, у нас есть наши стандартные appSettings плюс Ocelot, который мы используем, чтобы Octopus преобразовывал различные переменные, которые мы хотим, когда наш экземпляр Ocelot развертывается в наших тестовых / производственных средах (или только наших тестовых / локальных). one).

Похоже, это бит, который определяет, что делать с несколькими файлами:

В этом сценарии Ocelot будет искать любые файлы, которые соответствуют шаблону (? i) ocelot. ([a-zA-Z0-9] *). json и затем объедините их вместе. Если вы хотите установить свойство GlobalConfiguration, у вас должен быть файл с именем ocelot.global. json.

Не уверен, нужно ли вам явно определять каждый файл (если они не могут быть определены через переменную как {env.EnvironmentName}), но это должно быть достаточно просто для тестирования.

Извините, если я получил неправильный конец флешки, но надеюсь, что это поможет.

...