我试图将Swagger嵌入到我的Asp Core(.Net 6)项目中,其中存在一些路由覆盖的情况。然而,我所面临的问题什至可以在以下情况下重现。
考虑一个最小的Asp Core(.Net 6)应用程序。例如,就像Swashbuckle用来测试的应用程序:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/tree/master/test/WebSites/MinimalApp
现在,考虑同一应用程序中的两个控制器:
[ApiController]
[Route("/api")]
public class MyFallbackController : ControllerBase
{
[HttpGet("values", Order = 1)]
public ActionResult<object> GetValues()
{
return new[] { 1, 2, 3 };
}
}
[ApiController]
[Route("/api")]
public class MyOverrideController : ControllerBase
{
[HttpGet("values", Order = 0)]
public ActionResult<object> GetValues()
{
return new[] { 4, 5, 6 };
}
}
请注意,路由完全相同,但只考虑第一个(Order = 0
)。
如果我运行应用程序并导航到:
本地主机:7263
该响应给出了预期结果:[4, 5, 6]
个
然而,当我尝试访问Swagger部分时,它不起作用,因为(显然)它将控制器对视为冲突:
处理请求时发生未处理的异常。
SwaggerGenerator异常:动作的方法/路径组合“GET api/values”发生恩怨- WebApplication2.MyFallbackController.GetValues(WebApplication 2)、WebApplication2.MyOverrideController.GetValues(WebApplication 2)。对于Swagger/OpenAPI 3.0,动作需要唯一的方法/路径组合。请使用ConflictingActionsResolver做为解决方法
有什么办法可以解决这个问题吗?
1条答案
按热度按时间fruv7luv1#
找到了。
顺便说一句,正如异常消息所示,诀窍在于
SwaggerGen
配置。基本上,上述函数仅选择副本中具有最低阶的
ApiDescription
。这是我天真而有效的解决方案。例如,我不知道输入集合是否已经按顺序排序。在这种情况下,代码可能会更简单。