使用 swashbucle 启用 swagger 时出错

Error enabling swagger with swashbucle

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

但是,使用默认配置安装的 swashbuckle 无法正常工作。

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

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

但是它只是显示以下错误:

<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost/api/Management/swagger/ui/index'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'swagger'. </MessageDetail>
</Error>

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

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

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

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

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

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

config.MapHttpAttributeRoutes();

它像冠军一样工作!!!我尝试按照 FAQ 进行修复,但这是唯一有效的方法。另一个要考虑的项目是我只需要 Swashbuckle.Core.

我们找到了解决问题的非常简单的方法。

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

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

只需将 swagger 移至列表顶部即可使其在网络 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);

只是发帖希望对其他人有所帮助。