Ocelot Gateway Swagger не отображает конечные точки службыC#

Место общения программистов C#
Ответить
Anonymous
 Ocelot Gateway Swagger не отображает конечные точки службы

Сообщение Anonymous »

Я работаю с микросервисной архитектурой. У меня так много сервисов зарегистрировано на моем шлюзе API (оцелот). Я не хочу открывать и проверять каждую службу на наличие конечных точек. Вместо этого я хочу видеть их по одному.
Ocelot может найти мой порт, но не показывает точку назначения контроллера моих микросервисов (я также могу достигать и выполнять операции с использованием URL-адреса шлюза/{ service})
Предыдущий файл program.cs шлюза (можно использовать точки, эта версия предшествует реализации Swagger, только для использования одного URL-адреса)
using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);

// Adding configuration for Ocelot
builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

// Adding Ocelot to the services collection
builder.Services.AddOcelot(builder.Configuration);

var app = builder.Build();

// Using Ocelot middleware
app.UseOcelot().Wait();

app.Run();

if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}

Program.cs шлюза
using MMLib.SwaggerForOcelot.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

builder.Services.AddOcelot(builder.Configuration);

builder.Services.AddSwaggerForOcelot(builder.Configuration);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "API Gateway", Version = "v1" });
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseSwaggerForOcelotUI(opt =>
{
    opt.PathToSwaggerGenerator = "/swagger/docs";
    opt.RoutePrefix = string.Empty;
});

app.UseOcelot().Wait();

app.Run();

Пример конечной точки в ocelot.json
"SwaggerEndPoints": [
{
"Key": "user",
"Config": [
{
"Name": "User Service",
"Version": "v1",
"Url": "http://localhost:5496/swagger/v1/swagger.json"
}
]
}, ...goes on

Пример того, как я получаю свои услуги:
"Routes": [
{
"DownstreamPathTemplate": "/{id}",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/{id}",
"UpstreamHttpMethod": ["GET"]
},
{
"DownstreamPathTemplate": "/get",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/get",
"UpstreamHttpMethod": ["POST"]
},
{
"DownstreamPathTemplate": "/list",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 5496
}
],
"UpstreamPathTemplate": "/api/user/list",
"UpstreamHttpMethod": ["POST"]
}, ...goes on

Я также могу без проблем использовать Swagger в каждом сервисе. Но на всякий случай я поделюсь каждой версией, которую я использую при попытке достичь конечных точек, чтобы отобразить их в Swagger на шлюзе.
Service program.cs (я могу использовать Swagger без комментариев строки, эти строки с комментариями предназначены только для проверки отображения конечных точек в шлюзе - не сработало -)
using App;
using App.Controller;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);
builder.SetServices(typeof(Program).Assembly);

#region Custom codes
builder.Services.AddDbContext();
builder.Services.AddScoped();

// builder.Services.AddSwaggerGen(c =>
// {
// c.SwaggerDoc("v1", new OpenApiInfo { Title = "User Service API", Version = "v1" });
// });

var serviceProvider = builder.Services.BuildServiceProvider();
var eventBus = serviceProvider.GetRequiredService();
eventBus.Subscribe(serviceProvider, "service.User");

#endregion

var app = builder.Build();

// if (app.Environment.IsDevelopment())
// {
// app.UseSwagger();
// app.UseSwaggerUI(c =>
// {
// c.SwaggerEndpoint("/swagger/v1/swagger.json", "User Service API V1");
// });
// }

app.SetApp();
app.SetControllers();
app.Run();


Подробнее здесь: https://stackoverflow.com/questions/790 ... -endpoints
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»