Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

404 trying to route the Upstream path to downstream path in Ocelot

I am facing this warning/error while forwarding the incoming http request to the downstream path.

Ocelot.DownstreamRouteFinder.Middleware.DownstreamRouteFinderMiddleware: Warning: requestId: 80000025-0004-fd00-b63f-84710c7967bb, previousRequestId: no previous request id, message: DownstreamRouteFinderMiddleware setting pipeline errors. IDownstreamRouteFinder returned Error Code: UnableToFindDownstreamRouteError Message: Failed to match Route configuration for upstream path: /getDepartment, verb: GET.

Program.cs

public class Program
{
    public static void Main(string[] args)
    {
        CreateWebHostBuilder(args).Build().Run();
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
       WebHost.CreateDefaultBuilder(args)
       .ConfigureAppConfiguration((host, config) =>
       {
           config.AddJsonFile("ocelot.json");
       })
    .UseStartup<Startup>();
}

Startup.cs

public IConfiguration Configuration { get; }

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
    services.AddOcelot(Configuration);
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public async void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    await app.UseOcelot();

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

ocelot.json

{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "api/department",
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 44388
        }
      ],
      "UpstreamPathTemplate": "/getDepartment",
      "UpstreamHttpMethod": [
        "Get"
      ]
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "http://localhost:5000"
  }
}

I am getting Error 404 in this.

like image 622
Manan Kapoor Avatar asked May 25 '20 07:05

Manan Kapoor


People also ask

What is upstream and downstream in Ocelot?

The UpstreamPathTemplate is the URL that Ocelot will use to identify which DownstreamPathTemplate to use for a given request. The UpstreamHttpMethod is used so Ocelot can distinguish between requests with different HTTP verbs to the same URL.

What is upstream path?

1, the "Upstream path" refers to the path from the servers to our monitoring point, while the "Downstream path" refers to the path from the monitoring point to the mobile device.


1 Answers

If you are using the latest version (16.0.0), change "ReRoutes" to "Routes" in your ocelot.json.

I was having the same problem and then came across this pull request explaining it had been changed to match up with a new Microsoft reverse proxy project (YARP). Their documentation needs updating. https://github.com/ThreeMammals/Ocelot/pull/1239

like image 183
Homertax Avatar answered Sep 20 '22 13:09

Homertax