新しい ASP.NET Core 8 Web API を作成しています。.NET 6 または .NET 7 を使用した以前のプロジェクトでは、次のものを使用できました。
services.AddApiVersioning(options =>
{
options.DefaultApiVersion = new ApiVersion(1, 0);
options.AssumeDefaultVersionWhenUnspecified = true;
options.ReportApiVersions = true;
});
services.AddVersionedApiExplorer(options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
現在、このパッケージMicrosoft.AspNetCore.Mvc.ApiExplorer
は非推奨になっており、新しいものに置き換えましたAsp.Versioning.Mvc.ApiExplorer
が、 の拡張機能はありませんAddVersionedApiExplorer
。
Swagger の構成には、次のコードがあります。
public class ConfigureSwaggerOptions : IConfigureNamedOptions<SwaggerGenOptions>
{
private readonly IApiVersionDescriptionProvider _provider;
public ConfigureSwaggerOptions(IApiVersionDescriptionProvider provider)
{
_provider = provider;
}
public void Configure(SwaggerGenOptions options)
{
foreach (var description in _provider.ApiVersionDescriptions)
{
options.SwaggerDoc(
description.GroupName,
CreateVersionInfo(description));
}
}
public void Configure(string name, SwaggerGenOptions options)
{
Configure(options);
}
private static OpenApiInfo CreateVersionInfo(
ApiVersionDescription description)
{
var info = new OpenApiInfo()
{
Title = "Test API",
Version = description.ApiVersion.ToString(),
Description = "This is a test API.",
};
if (description.IsDeprecated)
{
info.Description += " This API version has been deprecated.";
}
return info;
}
}
アプリケーションを実行すると、このエラーが発生します
'Middletier.Api.Extensions.Configuration.ConfigureSwaggerOptions' をアクティブ化しようとしているときに、タイプ 'Asp.Versioning.ApiExplorer.IApiVersionDescriptionProvider' のサービスを解決できません。
どうすれば修正できますか?
ベストアンサー1
AddApiVersioning
の動作は少し異なります( を返しますIApiVersioningBuilder
)。 をインストールするAsp.Versioning.Mvc.ApiExplorer
と、 を呼び出すことができます。AddApiExplorer
IApiVersioningBuilder
返された日付AddApiVersioning
:
builder.Services.AddApiVersioning(options =>
{
options.DefaultApiVersion = new ApiVersion(1, 0);
options.AssumeDefaultVersionWhenUnspecified = true;
options.ReportApiVersions = true;
})
.AddApiExplorer(options =>
{
options.GroupNameFormat = "'v'VVV";
options.SubstituteApiVersionInUrl = true;
});
を参照してくださいクイックスタート、サンプルそしてこの質問は -ApiVersion 属性が .NET 8 で動作しない