相关疑难解决方法(0)

ApiVersion 属性在 .NET 8 中不起作用

我最近将 webapi 升级到 .NET 8。当我测试控制器时,ApiVersion 属性在 swagger 页面中不起作用。

[ApiVersion("1.0")]
[Route("v{version:apiVersion}/api/[controller]")]
[ApiController]
[Authorize]
public class SubscriptionController(ISubscriptionDataService subscriptionDataService, 
                                    IConfigurationService configurationService) : ControllerBase
Run Code Online (Sandbox Code Playgroud)

在 swagger 页面中,默认情况下不会填写版本,就像在 .NET 7 中一样。

在此输入图像描述

以前,使用默认模板weatherforecast 控制器时,行为是默认填充的。

该控制器的代码如图所示。

[ApiVersion("1.0")]
[Route("v{version:apiVersion}/api/[controller]")]
[ApiController]
[Authorize]
public class WeatherForecastController : ControllerBase
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在 Program.cs 中,添加以下内容以执行版本控制。

private static void AddApiVersioning(IServiceCollection services)
{
    services.AddApiVersioning(options =>
    {
        options.AssumeDefaultVersionWhenUnspecified = false;
        options.ReportApiVersions = false;
    });

    services.AddVersionedApiExplorer(options =>
    {
        options.GroupNameFormat = "'v'VVV";
        options.SubstituteApiVersionInUrl = true;
    });
}
Run Code Online (Sandbox Code Playgroud)

编辑1

由于以下弃用,完成此操作的方式需要更改。

Microsoft.AspNetCore.Mvc.Versioning -> Asp.Versioning.Mvc Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer -> Asp.Versioning.Mvc.ApiExplore

在Program.cs中,需要完成以下操作:

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

builder.Services.AddApiVersioning(options …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-routing asp.net-core-webapi .net-8.0

7
推荐指数
1
解决办法
2076
查看次数