我在AKS上部署了两个kubernetes服务,它们接收来自Nginx入侵控制器的通信量。这两个服务的端点是https:<dns>/service1和https:<dns>/service2。现在我想为每个服务设置Swagger。下面是我如何为其中一个服务设置Swagger。
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
});通过这种配置,我可以通过https:<dns>/service1/swagger访问swagger。
现在的问题是,在Swagger中,当我想通过单击“试试看”按钮来测试api时,Swagger是https:<dns>/api/v1/contoller而不是https:<dns>/service1/api/v1/contoller的url。这意味着Swagger不知道path /service1/的存在。我发现了几个相关的问题,比如这个How to change base url of Swagger in ASP.NET core 。但它们并不能解决我的问题。我猜我需要为Swagger设定一条基本路线。如果有人能告诉我如何在ASP.NET核心2.0中为Swagger配置基本路径,我们将不胜感激。
发布于 2019-10-04 11:53:48
改变这一点:
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "API V1");
});对此:
用于dotnet核心2.x
app.UseSwagger(c =>
{
#if !DEBUG
c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.BasePath = "/service1");
#endif
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "API V1");
});For dotnet核心3.x (Swashackle5.x prerelease+)
app.UseSwagger(c =>
{
#if !DEBUG
c.RouteTemplate = "swagger/{documentName}/swagger.json";
c.PreSerializeFilters.Add((swaggerDoc, httpReq) => swaggerDoc.Servers = new System.Collections.Generic.List<OpenApiServer>
{
new OpenApiServer { Url = $"{httpReq.Scheme}://{httpReq.Host.Value}/service1" }
});
#endif
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("./swagger/v1/swagger.json", "API V1");
});#if !DEBUG . #endif是在本地机器调试时访问swagger用户界面所必需的。
注意:我假设"/service1“与您的掌舵图的values.yaml文件中的值相同。(见下文)
...
ingress:
enabled: true
annotations: {
kubernetes.io/ingress.class: "nginx",
nginx.ingress.kubernetes.io/rewrite-target: /$1
}
path: /service1/?(.*)
hosts:
- your-aks-subdomain.your-azure-region.cloudapp.azure.com
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
hpa:
...发布于 2018-10-01 16:13:55
请把你的public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) {
在此之后使用:
app.UseSwaggerUI(c=>
{
c.SwaggerEndpoint("/service1/swagger/v1/swagger.json", "Giftaway API V1");此选项
c.RoutePrefix = "service1";这会让你得到https:<dns>/service1/api/v1/controller
发布于 2018-09-13 18:19:39
https://stackoverflow.com/questions/52317778
复制相似问题