我正在使用带有.NET Core和Angular 2项目模板的ASP.NET Boilerplate v2.0.1。
我的项目中有多个模块,目前使用相同的API端点提供服务。请注意,将来我将为单个模块提供单独的API端点。
由于每个模块的API端点都相同,因此通过NSwag生成的服务代理将拥有所有模块的服务。
我需要根据单个模块生成代理,因此为此,我考虑使用API版本控制完成。因此,我将附加模块名称而不是v1,v2等。
我有以下代码:
Configuration.Modules.AbpAspNetCore()
.CreateControllersForAppServices(
typeof(Module).GetAssembly(),
"modulename"
);
services.AddSwaggerGen(options =>
{
options.SwaggerDoc("module1", new Info { Title = "Module 1", Version = "module1" });
options.SwaggerDoc("module2", new Info { Title = "Module 2", Version = "module2" });
}
app.UseSwagger(options =>
{
options.RouteTemplate = "swagger/{documentName}/swagger.json";
});
// Enable middleware to serve swagger-ui assets (HTML, JS, CSS etc.)
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/module1/swagger.json", "Module 1");
options.SwaggerEndpoint("/swagger/module2/swagger.json", "Module 2");
});
这样,我可以生成两个端点,如下所示:
http://localhost:5000/swagger/module1/swagger.json
http://localhost:5000/swagger/module2/swagger.json
但两者都拥有所有模块的信息。
请更正我或建议实现此功能的方法。
答案 0 :(得分:0)
看起来你正在使用swashbuckle而不是NSwag来生成你的招摇文档。有多种方法可以按版本分隔文档,请参阅swashbuckle文档https://github.com/domaindrivendev/Swashbuckle.AspNetCore。默认方法是使用上面的启动配置,并使用相应的ApiExplorer组名称修饰方法。组名需要与swaggerdoc config中指定的第一个参数匹配。
[ApiExplorerSettings(GroupName = "module1")] //Module 1 Method
你也错过了模块中第二个招摇终点的'e'。
答案 1 :(得分:0)
要添加多个源,请编辑 SwaggerUIOptions。 例如:
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("http://<ip1>:<port>/swagger/v1/swagger.json", "ServiceName1");
c.SwaggerEndpoint("http://<ip2>:<port>/swagger/v1/swagger.json", "ServiceName2");
});