Web Api - Swagger文档错误500

时间:2015-10-06 15:20:15

标签: asp.net-web-api swagger

当我访问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

6 个答案:

答案 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 }
);