Ocelot 可以拥有自己的 Controller/Actions 吗?

Can Ocelot have it's own Controller/Actions?

我正在尝试组装一个 API 网关,该网关还用于混合对多个 API 的调用。我还想拥有自动生成的 Swagger,所以我想结合 Ocelot 的授权和速率限制功能,但也希望能够在 .NET 代码中创建边缘自定义 API 来处理API 个调用的翻译和组合。

这对 Ocelot 可行吗?有任何示例吗? Ocelot 是否仅作为单独的应用程序与下游 API 一起使用?我试图避免只存在于混搭和复合 API 调用的额外跃点。

Ocelot 不支持任何 auto-generated swagger。 但是你可以 hand-roll 你自己的 solution.As 据我所知,Ocelot 只能通过提供 ocelot.json 配置和你的 re-reroutes 配置到下游 apps/api s.

Ocelot Swagger

这是一个如何在同一 NET6 应用程序中将控制器与 Ocelot 结合使用的示例。

来自Program.cs

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile("ocelot.json");
builder.Services.AddControllersWithViews();
builder.Services.AddOcelot();
var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();

app.UseEndpoints(endpoints => {
    endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
});

app.UseOcelot().Wait();
app.Run();

您还可以为此控制器添加 Swagger:

using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);
builder.Configuration.AddJsonFile("ocelot.json");
builder.Services.AddSwaggerGen();
builder.Services.AddControllersWithViews();
builder.Services.AddOcelot();

var app = builder.Build();
app.UseStaticFiles();
app.UseRouting();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
});

app.UseEndpoints(endpoints => {
    endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
});

app.UseOcelot().Wait();
app.Run();