我正在创建一个新的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没有扩展.

enter image description here

在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;
    }
}

当我运行应用程序时,我得到这个错误

try 激活‘Asp.Versioning.ApiExplorer.IApiVersionDescriptionProvider’时无法解析类型‘Middletier.Api.Extensions.Configuration.ConfigureSwaggerOptions’.的服务

enter image description here

我怎么才能修好它呢?

推荐答案

AddApiVersioning的工作原理略有不同(它返回IApiVersioningBuilder).安装Asp.Versioning.Mvc.ApiExplorer,它将允许对AddApiVersioning返回的IApiVersioningBuilder调用AddApiExplorer:

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;
    });

Quick Startsamples和这个问题-ApiVersion attribute not working in .NET 8

Csharp相关问答推荐

无法使用并行库并行化我的代码

Regex在c#中完全匹配

当打印一行x个项目时,如何打印最后一行项目?

更改对象的旋转方向

如何删除文件的基础上嵌入的时间戳嵌入文件名

选取器与.NET Maui MVVM的绑定属性

在具有主构造函数的类中初始化属性时出现警告

查找表中的模式

持有者安全定义未显示在Swagger.NET 8中

数据库.Migrate在对接容器重启时失败

.Net MAUI,在将FlyoutPage添加到容器之前,必须设置添加构造函数导致Flyout和Detail"

为什么C#/MSBuild会自发地为不同的项目使用不同的输出路径?

C#静态抽象属性不能被子接口覆盖

Visual Studio,Docker容器-容器调用:连接被拒绝

为什么在使用JsonDerivedType序列化泛型时缺少$type?

try 访问字典中的模拟对象时引发KeyNotFoundException

.NET6最小API:操作.MapGet之后的响应

C#LINQ多行条件

XmlSerializer在遇到XML属性(命名空间)时崩溃

部署Aspnet Blazor服务器时出现未处理的Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]异常