Не удается нацеливаться на OpenAPI 3.x после обновления Swashbuckle.aspnetCore до v9.xC#

Место общения программистов C#
Ответить
Anonymous
 Не удается нацеливаться на OpenAPI 3.x после обновления Swashbuckle.aspnetCore до v9.x

Сообщение Anonymous »

Я пытаюсь обновить пакет swashbuckle.aspnetcore от версии 7.3.2 до последней версии, которая в настоящее время составляет 9,0.3, в приложении ASP.Net Core Targeting .NET 8. Обратите внимание, что это приложение будет пропускать .NET 9 и обновлять до .NET 10 в будущем, но это может быть каким -то временем. В настоящее время есть эта строка: < /p>

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

app.UseSwagger();
< /code>
, который создает файл swagger.json, который начинается с: < /p>
"openapi": "3.0.1",
< /code>
И все хорошо. Если я просто обновлю пакет без изменения кода, моя страница документации показывает сообщение об ошибке: < /p>

Невозможно отобразить это определение < /p>
Предоставленное определение не указано в действительном поле версии. Поддерживаемые поля версий-это Swagger: «2.0» и те, которые соответствуют OpenAPI: 3.x.y (например, OpenAPI: 3.1.0). < /P>
< /blockquote>
В данном случае файл Swagger.json начинается с: < /p>

, что, кажется, должно быть действительным. Я могу изменить код C# на это: < /p>
app.UseSwagger(options => options.OpenApiVersion = Microsoft.OpenApi.OpenApiSpecVersion.OpenApi2_0);
< /code>
и отображается страница, создавая файл swagger.json, который начинается с: < /p>
"swagger": "2.0",
< /code>
, который в основном работает, но создает еще одну проблему, в которую я не буду здесь. Если я изменю openAPI2_0 
на openAPI3_0 , то у меня есть та же проблема, что и раньше, так как я просто явно указываю значение по умолчанию. предлагается как дубликат, но ни один из предоставленных ответов не помогает здесь. Большинство ответов не применяются в Swashbuckle с ядром ASP.NET. Наиболее актуальные ответы предполагают что-то подобное: < /p>

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

app.UseSwaggerUI(c => { c.SwaggerEndpoint("./v1/swagger.json", "MyServiceAPI"); });
Я изначально не писал код, с которым я работаю сейчас, но у нас есть это в Configure :

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

//do not call this otherwise get /swagger/index.html page. We have our own page.
//app.UseSwaggerUI(); //dont configure options here. Do it in ConfigureServices so we can use DI with SwaggerUIOptions.
и это в Configureservices :
var filePath = Path.Combine(System.AppContext.BaseDirectory, "SI.Gbrmpa.Eotr.Web.xml");
services.AddSwaggerGen(options =>
{
options.IncludeXmlComments(filePath);
options.AddSecurityDefinition("bearerAuth", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.Http,
Scheme = "bearer",
BearerFormat = "JWT",
Description = "JWT Authorization header using the Bearer scheme."
});
options.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "bearerAuth" }
},
new string[] {}
}
});
options.SchemaFilter();
});

services.AddOptions()
.Configure((swaggerUiOptions) => //configure here and not app.UseSwaggerUI() so that we can use DI with SwaggerUIOptions
{
swaggerUiOptions.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
});
< /code>
Таким образом, мы уже делаем эквивалент того, что предлагают эти ответы. Как я уже сказал, это уже работает с пакетом V7.3.2, поэтому, кажется, знает, где найти файл Swagger.json, и определение версии в этом файле также, кажется, понимается. Файл находится в том же месте и определение версии, в то время как более высокая версия, все еще кажется действительной, поэтому я не уверен, в чем проблема для более нового пакета.


Подробнее здесь: https://stackoverflow.com/questions/797 ... re-to-v9-x
Ответить

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

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

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

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

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