Net Core 3.1 + Swagger + nginx Невозможно отобразить это определение - PullRequest
0 голосов
/ 05 мая 2020

У меня проблемы с правильной работой интерфейса 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 выдает эту ошибку:

enter image description here

Это чванство. 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");
});

enter image description here

Как видно из консоли отладки, пользовательский интерфейс запрашивает чванство. json документ на неправильный URL, он не включает префикс / api / users

Так работают следующие маршруты:

  • http: // {server} / api / users / user / changePassword
  • http: // {server} /api/users/swagger/v1/swagger.json

Я действительно застрял на этом, могу? т двигаться вперед. Я очень ценю любую помощь.

...