Swaggergeneratorexception:冲突方法/路径组合“ post api/v {version}/雇员”采取行动

发布于 2025-02-05 08:25:47 字数 323 浏览 2 评论 0原文

当使用这种方法大肆宣传时,我有问题。你能帮助我吗?

[HttpPost]
        [ApiVersion("1.0")]
         public IActionResult SetEmployeeV1()
        { 
          v1 ...
        }
        [HttpPost]
        [ApiVersion("2.0")]
        public IActionResult SetEmployeeV2()
        {
           v2 ...             
        }

I have problem when run swagger with this methods. Can you help me?

[HttpPost]
        [ApiVersion("1.0")]
         public IActionResult SetEmployeeV1()
        { 
          v1 ...
        }
        [HttpPost]
        [ApiVersion("2.0")]
        public IActionResult SetEmployeeV2()
        {
           v2 ...             
        }

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

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

发布评论

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

评论(3

聽兲甴掵 2025-02-12 08:25:47

我创建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迅速显示。 ,我需要修改程序。

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

因此 //i.sstatic.net/oy2va.png“ alt =”在此处输入图像描述”>

I create 2 controllers to represent different versions.

This is version one.

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

This is version 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"));
        }
    }
}

enter image description here

Now I can call them successfully in a browser, but I can't let the api displayed in swagger. So I need to modify Program.cs(Startup.cs in .net 5)

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

enter image description here

抠脚大汉 2025-02-12 08:25:47

我遇到了相同的错误SwaggerGenerAtoreXception:冲突方法/路径组合“补丁API/操作需要Swagger/OpenAPI 3.0的唯一方法/路径组合。将ConcustingSignActionSresolver用作解决方法。您可以得到实际错误通过

以下

​例如

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

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

。 。

    /// <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();

I was getting the same error SwaggerGeneratorException: Conflicting method/path combination "PATCH api/ Actions require a unique method/path combination for Swagger/OpenAPI 3.0. Use ConflictingActionsResolver as a workaround. You can get the actual error by going to your Swagger link like below.

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

This happens when you have the same route for multiple APIs. For example:-

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

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

All you have to do is to change that to specific routes as [HttpPatch("Do1")] and [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();
这样的小城市 2025-02-12 08:25:47

解决方案之一是针对.net 6+,在
program.cs

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

One of the solution would be For .NET 6+, configure the Swagger Generation in
Program.cs

    builder.Services.AddSwaggerGen(c => {
                  c.IgnoreObsoleteProperties = true;
                  c.OperationProcessors.Add(new IncludeControllersInSwagger());
             });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文