Ocelot 可以有自己的控制器/操作吗?

Kyl*_*J V 5 asp.net-core ocelot

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

Ocelot 可以做到这一点吗?有什么例子吗?Ocelot 是否只能作为单独的应用程序与下游 API 一起使用?我试图避免仅针对混搭和复合 API 调用而存在的额外跳跃。

小智 8

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

来自程序.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();
Run Code Online (Sandbox Code Playgroud)

您还可以为此控制器添加 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();
Run Code Online (Sandbox Code Playgroud)


Dar*_*ren 1

Ocelot 不支持任何自动生成的 swagger。但你可以手动推出你自己的解决方案。据我了解,Ocelot 只能通过提供 ocelot.json 配置来工作,并将重新路由配置为下游应用程序/api。

豹猫大摇大摆