Ocelot 16.0 无法匹配路由:404

  解决方案: 版本较高的Ocelot中,配置路由使用的应该是Routes,而不是ReRoutes。具体配置可以继续阅读下文

 

   在学习使用Ocelot的时候,跟着学习的步骤一步步走过来,(没有看官方文档),在调用的时候一直出现404。(ocelot使用的版本是16.0 环境是 .netCore3.1)

具体代码如下:

 //program配置
 public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration(c =>
            {
                c.AddJsonFile("configuration.json", optional: false, reloadOnChange: true);
            })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup();
                });
    }
//startUp配置
 public class Startup
    {
        public Startup(IConfiguration configuration)
        {
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {

            services.AddOcelot();
           /// services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            //使用新的请求处理管道
            app.UseOcelot();
            //删除旧的请求处理管道
            //if (env.IsDevelopment())
            //{
            //    app.UseDeveloperExceptionPage();
            //}

            //app.UseHttpsRedirection();

            //app.UseRouting();

            //app.UseAuthorization();

            //app.UseEndpoints(endpoints =>
            //{
            //    endpoints.MapControllers();
            //});
        }
    }

//configuration.json  文件内容
{
  "ReRoutes": [
    {
      "DownstreamPathTemplate": "/api/{url}", //服务地址--url为变量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 5859
        }
      ],
      "UpstreamPathTemplate": "/T5859/{url}", //网关地址--url为变量
      "UpstreamHttpMethod": [ "Get", "Post" ] //,
      //"GlobalConfiguration": {
      //  "BaseUrl": "http://localhost:1600"
      //}
    }
  ]
}



 

 调用具体地址出现如下图结果:

 

 

后面被迫去查看官网的文档,看了半天也没看出问题。最后逐字查看,查到了原因。 版本较高的Ocelot中,配置路由使用的应该是Routes,而不是ReRoutes

具体修改代码如下:

 

//configuration.json  文件内容
{
  "Routes": [
    {
      "DownstreamPathTemplate": "/api/{url}", //服务地址--url为变量
      "DownstreamScheme": "http",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 5859
        }
      ],
      "UpstreamPathTemplate": "/T5859/{url}", //网关地址--url为变量
      "UpstreamHttpMethod": [ "Get", "Post" ] //,
      //"GlobalConfiguration": {
      //  "BaseUrl": "http://localhost:1600"
      //}
    }
  ]
}

 

 修改了此名称之后,就可以正常使用了。所以调用第三方的插件,还是要看文档啊!!!

posted @ 2021-04-13 15:19  keke..lele  阅读(589)  评论(0编辑  收藏  举报