我有一个OWIN,自托管的Web API项目,我想在其中添加Swagger文档和Swagger UI。
我已经包含了Swashbuckle.Core包,我在Startup.cs
手动配置了它。
configuration.EnableSwagger(s =>
{
s.SingleApiVersion(Assembly.GetExecutingAssembly().GetName().Version.ToString().Replace('.', ' '), "MyApi").;
s.IncludeXmlComments($@"{System.AppDomain.CurrentDomain.BaseDirectory}\MyApi.XML");
s.DescribeAllEnumsAsStrings();
})
.EnableSwaggerUi(s =>
{
// By default, swagger-ui will validate specs against swagger.io's online validator and display the result
// in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the
// feature entirely.
//c.SetValidatorUrl("http://localhost/validator");
s.DisableValidator();
});
现在,我有一个基本控制器和两个从基础继承的附加控制器。不幸的是,我没有在招摇页面中看到控制器的名称和行为。
这是我的基本控制器:
public class BaseController : ApiController
{
public BaseController()
{
// Initialization...
}
public async Task<IHttpActionResult> MyAction()
{
// Code here...
}
}
Controler1:
public class My1Controller : BaseController
{
public MyController1(...): base(...)
{
// Initialization...
}
public async Task<IHttpActionResult> Post(Model1 model)
{
// Code here...
}
public async Task<IHttpActionResult> Post(Model2 model)
{
// Code here...
}
}
控制器2:
public class My2Controller : BaseController
{
public My2Controller(...): base(...)
{
// Initialization...
}
public async Task<IHttpActionResult> Post(Model1 model)
{
// Code here...
}
public async Task<IHttpActionResult> Post(Model2 model)
{
// Code here...
}
}
我无法在swagger索引页面中看到My1Controller
和My2Controller
。我在ApiExplorerSettings(IgnoreApi = true)]
和My1Controller
上尝试了My2Controller
属性但未发生任何事情。
是否因为控制器操作共享通用名称(具有不同参数类型的多个Post
操作)?我没有像上面的例子那样使用RPC样式的URL,而是使用RESTful URL,遵循5级媒体类型(5LMT)提议。
有什么建议吗?
答案 0 :(得分:1)
我相信您必须以不同的方式命名路由,以便它们不会对共享方法命名冲突。
添加属性
[ApiExplorerSettings(IgnoreApi=true)]
给您的基本控制器 和属性
[Route("/My1Service")]
[ServiceName("My1Service")]
[ApiVersion("1.0")]
和
[HttpPost(nameof(StoreCardPaymentMethod))]
每种方法之类的
答案 1 :(得分:0)
你无法看到它们的原因是因为swashbuckle只读取ApiCO控制器,除此之外的任何东西,例如OdataController,必须由开发人员在自定义文档过滤器的帮助下添加。这是一个例子 https://github.com/domaindrivendev/Swashbuckle/blob/master/README.md
答案 2 :(得分:0)
ASP.NET Web API与naming conventions一起使用,这意味着您的控制器不会被解析,因为它们的名称不会以Controller
结尾。
这意味着MyController1
变为My1Controller
。
举个例子,将MyController1
更改为以下内容将起作用:
public class My1Controller : BaseController
{
public MyController1(...): base(...)
{
// Initialization...
}
public async Task<IHttpActionResult> Post(Model1 model)
{
// Code here...
}
public async Task<IHttpActionResult> Post(Model2 model)
{
// Code here...
}
}