从 YARP 路由中排除 Swagger

问题描述 投票:0回答:1

我有一个用例,我想在同一端口上托管 API 及其前端。我使用 YARP 来做到这一点。

因此,所有对

https://localhost:5001
的请求将默认路由到
https://localhost:5173/
。但是,最小 API 路由 (
/api
) 具有优先权,不会被 YARP 路由。这个效果很好。

我正在尝试将 Swagger 添加到组合中,但遇到一个问题,即对其静态内容的请求将通过 YARP 路由。例如:

https://localhost:5001/api/swagger/index.html
将正确加载,但
https://localhost:5001/api/swagger/swagger-ui.css
将由 YARP 路由。

这是我的设置:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services
    .AddReverseProxy()
    .LoadFromConfig(builder.Configuration.GetSection("ReverseProxy"));

var app = builder.Build();

app.MapGet("/api/hello", () => "Hello World!");

app.UseSwagger();
app.UseSwaggerUI(options =>
{
    options.RoutePrefix = "api/swagger";
});

app.MapReverseProxy();

app.Run();

配置:

  "ReverseProxy": {
    "Routes": {
      "route1": {
        "ClusterId": "cluster1",
        "Match": {
          "Path": "{**catch-all}"
        }
      }
    },
    "Clusters": {
      "cluster1": {
        "HttpClient": {
          "SslProtocols": [
            "Tls12"
          ]
        },
        "Destinations": {
          "cluster1/destination1": {
            "Address": "https://localhost:5173/"
          }
        }
      }
    }
  }

我可以做什么来解决这个问题?我一直无法弄清楚如何从 YARP 中排除所有

/api/swagger
路由。

asp.net-core minimal-apis ms-yarp
1个回答
0
投票

在映射代理之前添加这些调用:

app.UseStaticFiles();

app.UseRouting();

如果您还使用 useAuthorization,则必须将其放在 UseRouting 之后

看到

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/#order

© www.soinside.com 2019 - 2024. All rights reserved.