首页 > 解决方案 > 使用 OCELOT 的 API 网关 - 错误 - 无法启动 Ocelot

问题描述

我是 API 网关的新手,请按照以下链接开始。

https://www.c-sharpcorner.com/article/building-api-gateway-using-ocelot-in-asp-net-core/

当我尝试运行应用程序时,它会在以下代码行中的 Startup.cs 文件中引发错误。

启动.cs

public Startup(IHostingEnvironment env){
    var builder = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
    builder.SetBasePath(env.ContentRootPath)
    .AddJsonFile("configuration.json", optional: false, reloadOnChange: true)
    .AddEnvironmentVariables();
    Configuration = builder.Build();
}

public IConfigurationRoot Configuration { get; }

public void ConfigureServices(IServiceCollection services){
    Action<ConfigurationBuilderCachePart> settings = (x) =>{
        x.WithMicrosoftLogging(log =>{
            log.AddConsole(LogLevel.Debug);
        }).WithDictionaryHandle();
    };
    //services.AddOcelot(Configuration, settings);
    services.AddOcelot(Configuration);
}

public async void Configure(IApplicationBuilder app, IHostingEnvironment env){
    await app.UseOcelot();  // Error in this line number
}
}

错误:

无法启动Ocelot,错误为:不使用服务发现时DownstreamHostAndPorts必须设置且不为空否则Ocelot找不到你的服务!,不使用服务发现时DownstreamHostAndPorts必须设置且不为空否则Ocelot找不到你的服务!,不使用时使用服务发现 DownstreamHostAndPorts 必须设置且不能为空,否则 Ocelot 找不到你的服务!

配置.json

{</br>
    "ReRoutes": [</br>
        {</br>
            "DownstreamPathTemplate": "/api/customers",
            "DownstreamScheme": "http",
            "DownstreamHost": "localhost",
            "DownstreamPort": 9001,
            "UpstreamPathTemplate": "/customers",
            "UpstreamHttpMethod": [ "Get" ]</br>
        },</br>
        {</br>
            "DownstreamPathTemplate": "/api/customers/{id}",
            "DownstreamScheme": "http",
            "DownstreamHost": "localhost",
            "DownstreamPort": 9001,
            "UpstreamPathTemplate": "/customers/{id}",
            "UpstreamHttpMethod": [ "Get" ]</br>
        },</br>
        {</br>
            "DownstreamPathTemplate": "/api/products",
            "DownstreamScheme": "http",
            "DownstreamPort": 9002,
            "DownstreamHost": "localhost",
            "UpstreamPathTemplate": "/api/products",
            "UpstreamHttpMethod": [ "Get" ]</br>
        }</br>
    ],</br>
    "GlobalConfiguration": {
        "RequestIdKey": "OcRequestId",
        "AdministrationPath": "/administration"
    }</br>
}</br></br>

标签: apihostgatewayocelot

解决方案


您似乎已更新到最新的 Ocelot 软件包,因此您的 configuration.json 文件不正确。请参考 - http://ocelot.readthedocs.io/en/latest/features/routing.html

您需要将 DownStreamHost/Port 设置为:

"DownstreamHostAndPorts": [
      {
        "Host": "localhost",
        "Port": 9001
      }
    ],

推荐阅读