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>
</错误>

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

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

2 回答 2

12

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

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

只是发布这个,希望它可以帮助别人。

于 2016-05-06T11:11:59.477 回答
2

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

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

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

如果您删除默认路由的 MapHttpRoute 部分并且只有:

config.MapHttpAttributeRoutes();

它像冠军一样工作!!!我尝试按照有关修复它的常见问题解答,但这是唯一有效的方法。另一个要考虑的项目是我只需要 Swashbuckle.Core。

于 2016-04-18T20:28:40.807 回答