Как установить версию в URL-адресе swaggerUI - .NET 6C#

Место общения программистов C#
Ответить
Anonymous
 Как установить версию в URL-адресе swaggerUI - .NET 6

Сообщение Anonymous »

Я только что обновил библиотеки управления версиями API.
до этого:
  • Microsoft.AspNetCore.Mvc .Версионирование (5.0.0)
  • Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer (5.0.0)
теперь у меня есть:
  • Asp.Versioning.Mvc (6.4.0)
  • Asp.Versioning.Mvc. ApiExplorer(6.4.0)
до этого обновления версия записывалась автоматически, но теперь требуется передать ее в качестве параметра.
Изображение

Контроллер:

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

[Route("v{version:apiVersion}/Sales")]
public class SalesController : CustomController
{
private readonly ISalesBusinessLogic _SalesBusinessLogic;
private readonly IValidator _getSalesRequestDto;
public SalesController(
ISalesBusinessLogic SalesBusinessLogic,
IValidator getSalesRequestDto
)
{
_SalesBusinessLogic = SalesBusinessLogic;
_getSalesRequestDto = getSalesRequestDto;
}

[MapToApiVersion("4.0")]
[HttpGet]
[SwaggerResponseExample(StatusCodes.Status200OK, typeof(SalesResponseViewModelExample))]
[SwaggerResponse(StatusCodes.Status200OK, Type = typeof(GlobalResponse))]
public async Task getSales([FromQuery] getSalesRequestDto request)
{
var results = await _getSalesRequestDto.ValidateAsync(request);
results.AddToModelState(ModelState, null);
if (!results.IsValid)
{
return new ValidationFailedResult(results);
}
var result = await _SalesBusinessLogic.getSales(request);
return Ok(result);
}
}
Пользовательскийконтроллер:

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

[ApiController]
[EnableCors("cors")]
[Authorize]
[ApiVersion("4.0")]
[Produces(MediaTypeNames.Application.Json)]
[SwaggerResponseExample(StatusCodes.Status500InternalServerError, typeof(GlobalResponseErrorExample))]
[SwaggerResponse(StatusCodes.Status500InternalServerError, Type = typeof(GlobalResponse))]
[SwaggerResponseExample(StatusCodes.Status401Unauthorized, typeof(GlobalResponseInvalidTokenExample))]
[SwaggerResponse(StatusCodes.Status401Unauthorized, Type = typeof(GlobalResponse))]
public class CustomController : ControllerBase
{
}
Настроить параметры Swagger:

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

public class ConfigureSwaggerOptions : IConfigureNamedOptions
{
private readonly IApiVersionDescriptionProvider provider;

public ConfigureSwaggerOptions(IApiVersionDescriptionProvider provider)
{
this.provider = provider;
}

public void Configure(SwaggerGenOptions options)
{
// add swagger document for every API version discovered
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerDoc(
description.GroupName,
CreateVersionInfo(description));

options.ExampleFilters();

options.AddSecurityDefinition(
description.GroupName,
CreateSecurityScheme());

options.AddSecurityRequirement(CreateSecurityRequirement(description.GroupName));
}
}

public void Configure(string name, SwaggerGenOptions options)
{
Configure(options);
}

private OpenApiInfo CreateVersionInfo(ApiVersionDescription description)
{
var info = new OpenApiInfo()
{
Title = "API eCommerce",
Version = description.ApiVersion.ToString()
};

if (description.IsDeprecated)
{
info.Description += " This API version has been deprecated.";
}

return info;
}

private OpenApiSecurityScheme CreateSecurityScheme()
{
var securityScheme = new OpenApiSecurityScheme()
{
Name = "Authorization",
Type = SecuritySchemeType.ApiKey,
Scheme = "Bearer",
BearerFormat = "JWT",
In = ParameterLocation.Header,
Description = "JWT Authorization header using the Bearer scheme.  \r\n\r\n Enter 'Bearer' [space] and then your token in the text input below.\r\n\r\nExample: \"Bearer token\"",
};
return securityScheme;
}

private OpenApiSecurityRequirement CreateSecurityRequirement(string groupName)
{
var securityRequirement = new OpenApiSecurityRequirement()
{
{
new OpenApiSecurityScheme{
Reference = new OpenApiReference
{Type = ReferenceType.SecurityScheme, Id = groupName}
}, new string[] {}
}
};

return securityRequirement;
}
}
Program.cs:

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

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.ConfigureOptions();

//API Versioning
builder.Services.AddApiVersioning(options =>
{
options.AssumeDefaultVersionWhenUnspecified = true;
options.DefaultApiVersion = new ApiVersion(4, 0);
options.ReportApiVersions = true;
}).AddApiExplorer(setup =>
{
setup.GroupNameFormat = "'v'VVV";
setup.SubstituteApiVersionInUrl = true;
}).AddMvc();

var app = builder.Build();
var provider = app.Services.GetRequiredService();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(options =>
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint($"{description.GroupName}/swagger.json",
description.GroupName.ToUpperInvariant());
}
});
}
что мне не хватает для настройки?

Подробнее здесь: https://stackoverflow.com/questions/783 ... erui-net-6
Ответить

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

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

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

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

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