SwaggerGeneratorException:操作的方法/路径组合“POST api/v{version}/Employee”有冲突

问题描述 投票:0回答:3

使用这种方法运行 swagger 时遇到问题。你能帮我吗?

[HttpPost]
        [ApiVersion("1.0")]
         public IActionResult SetEmployeeV1()
        { 
          v1 ...
        }
        [HttpPost]
        [ApiVersion("2.0")]
        public IActionResult SetEmployeeV2()
        {
           v2 ...             
        }
c# asp.net-core swagger openapi.net
3个回答
1
投票

我创建了 2 个控制器来代表不同的版本。

这是第一版。

using Microsoft.AspNetCore.Mvc;

namespace WebApiNet6.Controllers.V1
{
    //[Route("api/[controller]")]
    [ApiController]
    [Route("api/v{version:apiVersion}/Data")]
    [ApiVersion("1.0")]
    public class DataController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        [HttpGet]
        public IEnumerable<string> Get()
        {
            return Summaries.Where(x => x.StartsWith("C"));
        }
    }
}

这是版本 2:

namespace WebApiNet6.Controllers.V2
{
    //[Route("api/[controller]")]
    [ApiController]
    [Route("api/v{version:apiVersion}/Data")]
    [ApiVersion("2.0")]
    public class DataController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        [HttpGet]
        public IEnumerable<string> Get()
        {
            return Summaries.Where(x => x.StartsWith("S"));
        }
    }
}

现在我可以在浏览器中成功调用它们,但是我不能让api以swagger方式显示。所以我需要修改Program.cs(.net 5中的Startup.cs)

using Microsoft.OpenApi.Models;

builder.Services.AddApiVersioning(setup =>
{
    setup.DefaultApiVersion = new ApiVersion(1, 0);
    setup.AssumeDefaultVersionWhenUnspecified = true;
    setup.ReportApiVersions = true;
});
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c => {
    c.SwaggerDoc("v1", new OpenApiInfo
    {
        Version = "v1",
        Title = "this is V1"
    });
    c.SwaggerDoc("v2", new OpenApiInfo
    {
        Version = "v2",
        Title = "this is V2"
    });

    c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
});

app.UseSwagger();
app.UseSwaggerUI();


0
投票

我遇到了同样的错误

SwaggerGeneratorException: Conflicting method/path combination "PATCH api/ Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround
。您可以通过访问 Swagger 链接来获取实际错误,如下所示。

https://localhost:{yourport}/swagger/v1/swagger.json

当多个 API 有相同的路由时,就会发生这种情况。例如:- /// <summary> /// Do something 1. /// </summary> /// <returns></returns> [HttpPatch] public string Do1() => Dosomething1(); /// <summary> /// Do something 2. /// </summary> /// <returns></returns> [HttpPatch] public string Do2() => Dosomething2();

您所要做的就是将其更改为特定路线,如
[HttpPatch("Do1")]

[HttpPatch("Do2")]
    /// <summary>
    /// Do something 1.
    /// </summary>
    /// <returns></returns>
    [HttpPatch("Do1")]
    public string Do1() => Dosomething1();

    /// <summary>
    /// Do something 2.
    /// </summary>
    /// <returns></returns>
    [HttpPatch("Do2")]
    public string Get2() => Dosomething2();



0
投票

builder.Services.AddSwaggerGen(c => { c.IgnoreObsoleteProperties = true; c.OperationProcessors.Add(new IncludeControllersInSwagger()); });

© www.soinside.com 2019 - 2024. All rights reserved.