我正在尝试使用几个简单的控制器创建一个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 }
);
答案 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。