У меня проблемы с правильной работой интерфейса Swagger. Я использую микросервисную архитектуру на кубернетах, все попадает через 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 core 3.1 API с парой конечных точек. Я использую интерфейс чванства и чванства. Все работает нормально локально, либо в docker, либо в Visual Studio, однако пользовательский интерфейс Swagger не работает в кубернетах. API работает нормально, чванство. json тоже отлично работает. Только пользовательский интерфейс 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");
});
Как видно из консоли отладки, пользовательский интерфейс запрашивает чванство. json документ на неправильный URL, он не включает префикс / api / users
Так работают следующие маршруты:
- http: // {server} / api / users / user / changePassword
- http: // {server} /api/users/swagger/v1/swagger.json
Я действительно застрял на этом, могу? т двигаться вперед. Я очень ценю любую помощь.