当我访问swagger网址:http://localhost:28483/swagger/ui/index
时,会产生此错误:
500 : undefined http://localhost:28483/swagger/docs/v1
有什么想法吗?
更新: 在firebug中查看此详细信息错误:
Not supported by Swagger 2.0: Multiple operations
with path 'api/BimModel' and method 'GET'. See the config setting - \"ResolveConflictingActions\" for
a potential workaround
答案 0 :(得分:10)
Swagger可能会将两个动作视为一个操作(就像这种常见情况一样)......
C
您似乎可以使用attribute routing来解决此问题,并在您的操作上方使用这些属性,因此招摇会分别识别它们。
GET api/Products
GET api/Products/{id}
答案 1 :(得分:4)
您是否尝试在swagger配置中启用此功能?
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
答案 2 :(得分:1)
在控制器中,它有两个不同的GET操作,Swagger不允许这样做。 我建议每个控制器只有一个GET操作或modify the router in WebApiConfig
答案 3 :(得分:0)
将属性路由与默认路由混合时,我遇到了同样的问题。 当我删除默认路由时,问题就消失了。缺点是,如果没有定义默认路由,我必须向所有控制器添加属性路由。
所以从我的WebApiConfig中我删除了:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
并将属性路由添加到我的控制器:
[Route("Session")] // Added this attribute
public async Task<IHttpActionResult> Get()
...
[Route("Session/{id}")] // Added this attribute
public async Task<IHttpActionResult> Get(int id)
实际上我在我的控制器上使用[RoutePrefix("Session")]
并在我的方法上使用[Route("")]
,但结果应该相同。
答案 4 :(得分:0)
由于参数名称在属性路由语句和方法签名之间不匹配,我收到此错误。
[HttpGet("{id}")]
public IActionResult Get(string deviceNumber){
...
更改&#34; {id}&#34;到&#34; {deviceNumber}&#34;它修正了错误。
答案 5 :(得分:-1)
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);