C# 虚张声势+;ASP.Net核心WebApi:Swagger文档不包括用于版本选择的请求头或查询参数?

C# 虚张声势+;ASP.Net核心WebApi:Swagger文档不包括用于版本选择的请求头或查询参数?,c#,swagger,asp.net-core-webapi,swashbuckle,C#,Swagger,Asp.net Core Webapi,Swashbuckle,我使用ASP.Net Core WebApi、Swashback和Microsoft.AspNetCore.Mvc.Versioning来记录和版本控制我的API 到目前为止,版本控制也有效 我的问题: 生成的Swagger UI文档不包括用于确定端点版本的参数(请求头或查询参数)。因此,当我在Swagger文档中按“Execute”时,为端点选择了错误的版本(默认版本) 准确地说: Swagger执行此请求:https://localhost:5001/values 但是,它应该执行以下请求:

我使用ASP.Net Core WebApi、Swashback和Microsoft.AspNetCore.Mvc.Versioning来记录和版本控制我的API

到目前为止,版本控制也有效

我的问题:

生成的Swagger UI文档不包括用于确定端点版本的参数(请求头或查询参数)。因此,当我在Swagger文档中按“Execute”时,为端点选择了错误的版本(默认版本)

准确地说:

Swagger执行此请求:https://localhost:5001/values

但是,它应该执行以下请求:https://localhost:5001/values?api-版本=2.0

代码:

控制器:

[ApiController]
[Route("[controller]")]
[SwaggerTag("Gets some values. Have fun with it")]
[ApiVersion("1.0")]
[ApiVersion("2.0")]
public class ValuesController : ControllerBase
{
    public ValuesController()
    {
    }

  /// <summary>
  /// Gets all values
  /// </summary>
  /// <remarks>There are values from 1 to 10</remarks>
  /// <returns></returns>
  [HttpGet]
  [SwaggerResponse(200, "Request was successful a list of values was returned", typeof(int[]))]
  [MapToApiVersion("1.0")]
  public async Task<IActionResult> Get()
  {
        return Ok(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 });
  }

  /// <summary>
  /// Gets all values
  /// </summary>
  /// <remarks>There are values from 1 to 20</remarks>
  /// <returns></returns>
  [HttpGet]
  [SwaggerOperation(Tags = new[] { "Values", "Changed Endpoints" })]
  [SwaggerResponse(200, "Request was successful a list of values was returned", typeof(int[]))]
  [MapToApiVersion("2.0")]
  public async Task<IActionResult> Getv2()
  {
        return Ok(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 });
  }
启用招摇过市:

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("1.0", new OpenApiInfo
            {
                Title = "API v1.0",
                Version = "1.0",
            });
            c.SwaggerDoc("2.0", new OpenApiInfo
            {
                Title = "API v1.0",
                Version = "1.0",
            });
            c.EnableAnnotations();
            c.IncludeXmlComments(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(), "wwwroot", "OpenApi.xml"));
            c.DocInclusionPredicate((docName, apiDesc) =>
            {
                if (!apiDesc.TryGetMethodInfo(out MethodInfo methodInfo)) return false;

                var versions = methodInfo.GetCustomAttributes(true)
                    .OfType<Microsoft.AspNetCore.Mvc.MapToApiVersionAttribute>()
                    .SelectMany(attr => attr.Versions).ToList();

                return versions.Any(v => v.ToString() == docName);
            });
        });
services.AddSwaggerGen(c=>
{
c、 SwaggerDoc(“1.0”),新OpenApiInfo
{
Title=“API v1.0”,
Version=“1.0”,
});
c、 SwaggerDoc(“2.0”),新OpenApiInfo
{
Title=“API v1.0”,
Version=“1.0”,
});
c、 EnableAnnotations();
c、 includexmlcoments(System.IO.Path.Combine(System.IO.Directory.GetCurrentDirectory(),“wwwroot”,“OpenApi.xml”);
c、 DocInclusionPredicate((docName,apiDesc)=>
{
如果(!apiDesc.TryGetMethodInfo(out MethodInfo MethodInfo))返回false;
var versions=methodInfo.GetCustomAttributes(true)
第()类
.SelectMany(attr=>attr.Versions).ToList();
返回versions.Any(v=>v.ToString()==docName);
});
});
有人能帮我吗?

通过添加以下内容来解决此问题:

     services.AddVersionedApiExplorer(options =>
        {
            options.GroupNameFormat = "'v'VVV";
            options.DefaultApiVersion = new ApiVersion(1, 0);
            options.AssumeDefaultVersionWhenUnspecified = true;
            options.DefaultApiVersionParameterDescription = "Do NOT modify api-version!";
        });
现在添加了这些参数。但不幸的是,没有自动填充默认值。有人有主意吗

通过添加以下内容解决了此问题:

     services.AddVersionedApiExplorer(options =>
        {
            options.GroupNameFormat = "'v'VVV";
            options.DefaultApiVersion = new ApiVersion(1, 0);
            options.AssumeDefaultVersionWhenUnspecified = true;
            options.DefaultApiVersionParameterDescription = "Do NOT modify api-version!";
        });
现在添加了这些参数。但不幸的是,没有自动填充默认值。有人有主意吗