使用swashbucle启用swagger时出错

时间:2015-10-02 09:57:52

标签: asp.net-web-api2 swagger swagger-ui swashbuckle

我正在尝试使用几个简单的控制器创建一个WebApi项目。如果我使用fiddler调用方法一切都很好,但我更喜欢使用swashbuckle,因为它有点漂亮。

但是,如果使用默认配置安装swashbuckle,它就无法正常工作。

当我导航到 http://localhost/api/mycontroller/swagger

重定向到 http://localhost/api/mycontroller/swagger/ui/index

但是它只显示以下错误:

  
    

<错误>
    <消息>
    未找到与请求URI匹配的HTTP资源' http://localhost/api/Management/swagger/ui/index'     < /消息>
    < MessageDetail>
    未找到与名为' swagger'的控制器匹配的类型。     < / MessageDetail>
    < /错误>

  

我的路由如下:             config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

2 个答案:

答案 0 :(得分:10)

我们找到了一个非常简单的解决方案。

当swagger被添加到项目中时,它会自动更新App_Start中的Bootstrapper.cs,它看起来像这样:

    WebApiConfig.Register(config);
    UnityConfig.Register(config, container);
    SignalRConfig.Register(app, container);
    SwaggerConfig.Register(config);

只需将swagger移动到列表顶部,就可以在web api路由之前正确注册它的路由:

    SwaggerConfig.Register(config); // Swagger must be the first thing in this sequence or it just does not work...
    WebApiConfig.Register(config);
    UnityConfig.Register(config, container);
    SignalRConfig.Register(app, container);

发布此信息是为了帮助其他人。

答案 1 :(得分:0)

我有同样的问题,我们只使用属性路由,所以这可能不适用于所有人。

默认情况下,WebApiConfig如下所示:

  config.MapHttpAttributeRoutes();
  config.Routes.MapHttpRoute(
               name: "DefaultApi",
               routeTemplate: "{controller}/{id}",
               defaults: new { id = RouteParameter.Optional }
           );

如果您删除了默认路由的MapHttpRoute部分,只需:

config.MapHttpAttributeRoutes();

它像冠军一样!我尝试按照FAQ关于修复它,但这是唯一有效的方法。还需要考虑的另一个问题是我只需要Swashbuckle.Core。