为了使用Swashbuckle创建Swagger文档,我按照this一直到xml doc部分。它应该允许我通过以下方式查看端点(在我的情况下):
http://localhost:51854/swagger/ui/index
不幸的是,我看不到任何端点:
有什么想法为什么以及如何解决这个问题?请注意,我从一个空的webapi项目创建了我的webapi-也许这就是问题所在。一定是缺少了什么,但我不确定是什么。
我现在已经确定了以下代码作为根本原因。
var container = new XyzWebApiStructureMapContainerConfigurator().Configure(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.Services
.Replace(typeof(IHttpControllerActivator),
new StructureMapHttpControllerActivator(container));
部分课程:
public class XyzWebApiStructureMapContainerConfigurator
{
public IContainer Configure(HttpConfiguration config)
{
var container = new Container(new BlaWebApiRegistry());
config.DependencyResolver = new StructureMapDependencyResolver(container);
return container;
}
}
public class StructureMapDependencyResolver : StructureMapDependencyScope, IDependencyResolver, IHttpControllerActivator
{
private readonly IContainer _container;
public StructureMapDependencyResolver(IContainer container)
: base(container)
{
_container = container;
container.Inject<IHttpControllerActivator>(this);
}
public IDependencyScope BeginScope()
{
return new StructureMapDependencyScope(_container.GetNestedContainer());
}
public IHttpController Create(
HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)
{
var scope = request.GetDependencyScope();
return scope.GetService(controllerType) as IHttpController;
}
}
附言:
简化的控制器代码:
[RoutePrefix("api/XYZ")]
public class BlaController : ApiController
{
private readonly ISomething _something;
public BlaController(ISomething something)
{
_something = something;
}
[Route("")]
[HttpGet]
public IHttpActionResult Resources([FromUri] BlaRequest blaRequest)
{
// something exciting
return Ok(returnObject);
}
}
PPS:
更多代码:
// WebApiConfig
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
//Global.asax.cs
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
var container = new XyzWebApiStructureMapContainerConfigurator().Configure(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.Services
.Replace(typeof(IHttpControllerActivator),
new StructureMapHttpControllerActivator(container));
}
}
PPPS:
{
swagger: "2.0",
info: {
version: "v1",
title: "Bla.Di.Bla"
},
host: "localhost:51854",
schemes: [
"http"
],
paths: { },
definitions: { }
}
6条答案
按热度按时间ktecyv1j1#
结果是这行:
在问题的类XyzWebApiStructureMapContainerConfigurator中出现了一些问题。
希望这对以后的人有帮助。
xbp102n02#
有同样的问题。原来DI(在我的情况下是Unity)被配置为绑定所有加载的程序集(其中一个是Swashbuckle.Core)。
只需稍微优化绑定哪些程序集就可以解决这个问题:
ar7v8xwq3#
我在swagger上也遇到了同样的问题,花了很长时间寻找解决方案。最后找到了一个。给每个控制器的action方法添加[HttpGet]或[HttpPost]属性。
hm2xizp94#
在我的案例中,问题是由IIS Express虚拟目录引起的,下面是详细的解释:
我有一个API项目,这是项目属性的样子:
这些属性被写入 applicationhost.config 文件,位于:C:\MyProjectPath.vs\MyProject\config\applicationhost.config
这是存储虚拟目录信息的文件部分:
一切都很好...
然后我开始遵循this指南,该指南要求我将项目URL更改为:
https://localhost:44334/Swagger
我这样做,然后点击 * 创建虚拟目录 * 按钮。
这样做会对 applicationhost.config 文件进行以下更改:
这就是问题所在,因为现在路径 /Swagger 指向我的项目的根。
为了解决这个问题,我不得不从 applicationhost.config 文件中删除新的部分,并将项目URL更改回其原始值。
rqenqsqc5#
我知道这是一个老问题,但我刚刚遇到它&有一个不同的解决方案已经建议。我希望它的使用,以其他任何人得到的问题。
这个问题是由Structuremap扫描引起的
这条线
int n. getString();
就是阻止斯威格工作我把它改成了
现在斯威格的表现如预期
u3r8eeie6#
你需要禁止content-security-policy的自定义头文件。这些头文件会阻止swagger js的执行。
删除头x1c 0d1x之前
注解内容-安全-策略
移除头后带有端点的Swagger UI