【问题标题】:Only one GET method in controller and yet getting "Not supported by Swagger 2.0: Multiple operations with path"控制器中只有一种 GET 方法,但得到“Swagger 2.0 不支持:带路径的多个操作”
【发布时间】:2019-10-16 01:57:25
【问题描述】:

我知道有很多问题的标题相同,但这个不同。

我在我的产品控制器上遇到了这个错误,为了调查这个问题,我在 ASP.NET Web API 2 中创建了一个演示控制器。 DemoController.cs

namespace WMWebAPIControllers.Controllers
{
[RoutePrefix("api/Demo")]
public class DemoController : ControllerBase
{
    [HttpGet]
    [Route("")]
    public async Task<IHttpActionResult> GetProducts(int CatalogType, string ProductNo)
    {
        return Ok();
    }
}}

奇怪的是演示控制器只有一种方法。没有任何方法可以让 swagger 发现歧义。

我不明白这个问题。 以下是招摇错误。

500 : {"message":"发生错误。","exceptionMessage":"Swagger 2.0 不支持:路径 'api/Demo' 和方法 'GET' 的多个操作。请参阅配置设置 - \ "ResolveConflictingActions\" 可能的解决方法","exceptionType":"System.NotSupportedException"

【问题讨论】:

  • 您确定没有旧的 dll 吗?也许您重命名了项目,更新了 dll 名称。在 Visual Studio 中进行清理,然后检查 bin / obj 文件夹,最后也删除 Windows\Framework32 和 64 临时文件。一切都消失后,重新加载 Visual Studio 并重试
  • @AndreiDragotoniu 我在哪里可以找到 Windows\Framework32 和 64 个临时文件?
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files 以及 Framework64。您将需要更新到您所在的位置
  • 我用同一个控制器创建了一个不同的项目,它运行良好。
  • 我无法理解这个控制器的问题,但我发现我的主控制器有问题。它有一个公共方法和一个带有 [route("")] 的方法。这是造成歧义的原因。我将公共方法标记为 [NonAction] 并且 Swagger 错误消失了。

标签: asp.net-web-api swagger asp.net-web-api-routing swashbuckle attributerouting


【解决方案1】:

问题是我有一个没有路由属性的公共方法。因此,swagger 发现为空路由配置的 GetProducts() 方法存在歧义。

将该公共方法标记为 [NonAction] 属性并解决问题。

它也可以标记为私有/受保护来解决这个问题,但在我的例子中,它是一个接口方法。

希望这会对某人有所帮助。

【讨论】:

  • 原来是我的问题
猜你喜欢
  • 1970-01-01
  • 2017-01-28
  • 1970-01-01
  • 2021-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多