首页 文章

使用swashbucle启用swagger时出错

提问于
浏览
2

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

但是,使用默认配置安装swashbuckle时它无法正常工作 .

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

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

但是它只显示以下错误:

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

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

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

2 回答

  • 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);
    

    只是张贴这个,希望它能帮助别人 .

  • 0

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

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

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

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

    config.MapHttpAttributeRoutes();

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

相关问题