我在让Swagger UI正常工作时遇到了问题。我在kubernetes上运行微服务架构,所有内容都通过如下所示的NGinX入口进入:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: develop
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: "/$2"
nginx.ingress.kubernetes.io/enable-cors: "true"
nginx.ingress.kubernetes.io/cors-allow-methods: "*"
nginx.ingress.kubernetes.io/cors-allow-origins: "*"
nginx.ingress.kubernetes.io/cors-allow-headers: "*"
spec:
rules:
- http:
paths:
- path: /api/users(/|$)(.*)
backend:
serviceName: dds-users-api-clusterip
servicePort: 80
- path: /api/search(/|$)(.*)
backend:
serviceName: dds-search-api-clusterip
servicePort: 80
另一方面,我有几个asp.net核心3.1 API和几个endpoint。我正在使用swagger和swagger UI。无论是在docker还是Visual Studio上,一切都可以在本地正常工作,但是Swagger UI在kubernetes上都不工作。API工作正常,swagger.json也工作正常。只有Swagger UI出现以下错误:
这是swagger.json:
// http://{server}/api/users/swagger/v1/swagger.json
{
"openapi": "3.0.1",
"info": {
"title": "Users API",
"description": "Users API",
"version": "v1"
},
"paths": {
"/user/changepassword": {
"post": {
"tags": [
"User"
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ChangePasswordRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/ChangePasswordRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/ChangePasswordRequest"
}
}
}
},
"responses": {
"204": {
"description": "Success"
},
"400": {
"description": "Bad Request",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
},
"404": {
"description": "Not Found",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProblemDetails"
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"ChangePasswordRequest": {
"type": "object",
"properties": {
"currentPassword": {
"type": "string",
"nullable": true
},
"newPassword": {
"type": "string",
"nullable": true
}
},
"additionalProperties": false
},
"ProblemDetails": {
"type": "object",
"properties": {
"type": {
"type": "string",
"nullable": true
},
"title": {
"type": "string",
"nullable": true
},
"status": {
"type": "integer",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"nullable": true
},
"instance": {
"type": "string",
"nullable": true
}
},
"additionalProperties": {
"type": "object",
"additionalProperties": false
}
}
}
}
}
我正在使用Swashbuckle.AspNetCore和Swashbuckle.AspNetCore.Swagger 5.4.1。配置非常简单,没有什么特别的:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo
{
Version = "v1",
Title = "Users HTTP API",
Description = "Swagger Users API",
});
});
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("/swagger/v1/swagger.json", "v1");
});
从调试控制台可以看到,UI向错误的URL请求swagger. json文档,它不包括 /api/users前缀
因此,以下路由有效:
我真的被困在这一点上,无法前进。我真的很感激任何帮助。
get swagger.json的请求路径是< code >/swagger/v1/swagger . JSON
但是您没有在< code >入口对象中添加http规则,以重定向到< code>/swagger路径的后端