Минимальная конечная точка API не появляется в OpenAPI, используя Custom Mapget ExtensionC#

Место общения программистов C#
Ответить
Anonymous
 Минимальная конечная точка API не появляется в OpenAPI, используя Custom Mapget Extension

Сообщение Anonymous »

Я работаю над проектом, используя шаблон чистой архитектуры.

Код: Выделить всё

public static class IEndpointRouteBuilderExtensions
{
public static IEndpointRouteBuilder MapGet(this IEndpointRouteBuilder builder, Delegate handler, [StringSyntax("Route")] string pattern = "")
{
Guard.Against.AnonymousMethod(handler);

builder.MapGet(pattern, handler)
.WithName(handler.Method.Name)
.WithOpenApi();

return builder;
}
}
< /code>
 program.cs
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;

services.AddOpenApi();
services.AddEndpointsApiExplorer();

var app = builder.Build();
app.UseHttpsRedirection();

app.MapEndpoints(); // Maps endpoints via reflection
app.MapOpenApi();   // OpenAPI support

app.Run();
< /code>
 webapplicationextensions.cs
public static class WebApplicationExtensions
{
public static RouteGroupBuilder MapGroup(this WebApplication app, EndpointGroupBase group)
{
var groupName = group.GetType().Name;

return app
.MapGroup($"/api/{groupName}")
.WithGroupName(groupName)
.WithTags(groupName)
.WithOpenApi();
}

public static WebApplication MapEndpoints(this WebApplication app)
{
var endpointGroupType = typeof(EndpointGroupBase);
var assembly = Assembly.GetExecutingAssembly();

var endpointGroupTypes = assembly.GetExportedTypes()
.Where(t => t.IsSubclassOf(endpointGroupType));

foreach (var type in endpointGroupTypes)
{
if (Activator.CreateInstance(type) is EndpointGroupBase instance)
{
instance.Map(app);
}
}

return app;
}
}

Образец группы конечных точек: Weatherforcasts

Код: Выделить всё

public class WeatherForecasts : EndpointGroupBase
{
public override void Map(WebApplication app)
{
app.MapGroup(this)
.MapGet(GetWeatherForecasts);
}

public async Task GetWeatherForecasts([AsParameters] WeatherService services)
{
var forecasts = await services.Queries.GetWeatherForecastsAsync();
return TypedResults.Ok(forecasts);
}
}
Проблема состоит в том, что конечная точка не отображается в Openapi json (https: // localhost: 7283/openapi/v1.json).
Нет ошибок, но настраиваемое настраивание , кажется, молча не зарегистрируется или не регистрируется. Конечная точка работает, если я проверяю его непосредственно через его URL -адрес, но невидимо OpenAPI. < /P>
Но когда я попробую таким образом: < /p>

Код: Выделить всё

app.MapGet("/test", ([FromServices] IWeatherForecastsQueries queries) =>
{
return Results.Ok(new[] { new WeatherForecast() });
}).WithOpenApi();
Он появляется в спецификациях OpenApi .>

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

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

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

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

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

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