我有一个用例,我想在同一端口上托管 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
路由。
在映射代理之前添加这些调用:
app.UseStaticFiles();
app.UseRouting();
如果您还使用 useAuthorization,则必须将其放在 UseRouting 之后
看到
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/#order