.NET 6 Web API大肆宣传版权问题

发布于 2025-02-08 20:15:50 字数 2124 浏览 3 评论 0原文

正如标题所暗示的那样,我有一个.NET 6 Web API,我正在尝试将版本添加到,但Swagger(Swashbuckle)似乎不了解发生了什么。

program.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Versioning;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddApiVersioning(setup =>
{
    setup.DefaultApiVersion = new ApiVersion(1, 0);
    setup.AssumeDefaultVersionWhenUnspecified = true;
    setup.ReportApiVersions = true;
});

ConfigureServices(builder.Services);

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint($"/swagger/v1/swagger.json", $"v1");
    c.SwaggerEndpoint($"/swagger/v2/swagger.json", $"v2");
});

app.Run();

void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore();
        
    services.AddApiVersioning(options =>
    {
        options.ReportApiVersions = true;
        options.AssumeDefaultVersionWhenUnspecified = false;
        options.ApiVersionReader = new UrlSegmentApiVersionReader();
    });
    services.AddSwaggerGen();
}

我像这样注释了我的控制器:

[ApiVersion("1.0")]
[Route("api/v1/[controller]")]
[ApiController]
public class MessageController : ControllerBase

[ApiVersion("2.0")]
[Route("api/v2/[controller]")]
[ApiController]
public class MessageController : ControllerBase

生成的宣传文档看起来像这样:

“在此处输入image

,如果我从下拉访问中选择V2,我明白了:

Nuget软件包和版本已安装的版本为:

”在此处输入图像描述

任何人都可以告诉我我要去哪里了。

As the title suggests, i have a .net 6 web api that I'm trying to add versioning to but swagger (swashbuckle) does not seem to understand whats going on.

Program.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Versioning;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddApiVersioning(setup =>
{
    setup.DefaultApiVersion = new ApiVersion(1, 0);
    setup.AssumeDefaultVersionWhenUnspecified = true;
    setup.ReportApiVersions = true;
});

ConfigureServices(builder.Services);

var app = builder.Build();

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint(
quot;/swagger/v1/swagger.json", 
quot;v1");
    c.SwaggerEndpoint(
quot;/swagger/v2/swagger.json", 
quot;v2");
});

app.Run();

void ConfigureServices(IServiceCollection services)
{
    services.AddMvcCore();
        
    services.AddApiVersioning(options =>
    {
        options.ReportApiVersions = true;
        options.AssumeDefaultVersionWhenUnspecified = false;
        options.ApiVersionReader = new UrlSegmentApiVersionReader();
    });
    services.AddSwaggerGen();
}

I have annotated my controllers like so:

[ApiVersion("1.0")]
[Route("api/v1/[controller]")]
[ApiController]
public class MessageController : ControllerBase

[ApiVersion("2.0")]
[Route("api/v2/[controller]")]
[ApiController]
public class MessageController : ControllerBase

The swagger document that is generated looks like this:

enter image description here

And if i select v2 from the drop down, I get this:

enter image description here

Nuget packages and versions installed are:

enter image description here

Can anyone tell me where I'm going wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅浅 2025-02-15 20:15:50

除了在此处传递配置外:

services.AddSwaggerGen(c =>
{
     c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API - V1", Version = "v1" });
     c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API - V2", Version = "v2" });
});

根据

[ApiVersion("2.0")]
[Route("api/v2/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v2")]
public class MessageController : ControllerBase

另外,文档显示了自定义和添加约定的方法。

Besides passing the configuration here:

services.AddSwaggerGen(c =>
{
     c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API - V1", Version = "v1" });
     c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API - V2", Version = "v2" });
});

According to the docs you have to specify the GroupName of the controller:

[ApiVersion("2.0")]
[Route("api/v2/[controller]")]
[ApiController]
[ApiExplorerSettings(GroupName = "v2")]
public class MessageController : ControllerBase

Also, the docs show ways to customize and add conventions.

红尘作伴 2025-02-15 20:15:50

您需要自己添加招摇文档,而不仅仅是为他们添加UI。在您的addswaggergen方法中,添加类似的内容:

services.AddSwaggerGen(c => {
    c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "My API" });
    c.SwaggerDoc("v2", new OpenApiInfo { Version = "v2", Title = "My API" });
});

You'll need to add the swagger documents themselves, not just the UI for them. In your AddSwaggerGen method, add something like:

services.AddSwaggerGen(c => {
    c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "My API" });
    c.SwaggerDoc("v2", new OpenApiInfo { Version = "v2", Title = "My API" });
});
悲欢浪云 2025-02-15 20:15:50

添加新版本的API后,请确保将其添加到AddSwaggergen方法如下

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API - V1", Version = "v1.0" , Description = "Version 1 Description "});
    c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API - V2", Version = "v2.0" , Description = "Version 2 Description "});
    c.SwaggerDoc("v3", new OpenApiInfo { Title = "My API - V3", Version = "v3.0", Description = "Version 3 Description " });
});

After adding a new version of API make sure to add it to AddSwaggerGen Method as below

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API - V1", Version = "v1.0" , Description = "Version 1 Description "});
    c.SwaggerDoc("v2", new OpenApiInfo { Title = "My API - V2", Version = "v2.0" , Description = "Version 2 Description "});
    c.SwaggerDoc("v3", new OpenApiInfo { Title = "My API - V3", Version = "v3.0", Description = "Version 3 Description " });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文