• 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"
          //}
        }
      ]
    }
    
     

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

  • 相关阅读:
    Spring Transaction属性之Propagation
    Eclipse使用代码清理功能(Clean Up)
    JAVA字符串格式化-String.format()的使用
    PHP Windows环境部署
    http server 下载地址
    微信APP支付(Java后台生成签名具体步骤)
    微信APP支付Java后端回调处理
    过滤HTML控件,将输入控件替换成SPAN
    pulic CMS 使用手册
    public cms 配置站点
  • 原文地址:https://www.cnblogs.com/kekelele/p/14653374.html
Copyright © 2020-2023  润新知