提问者:小点点

Net Core 3.1 Swagger nginx无法呈现此定义


我在让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前缀

因此,以下路由有效:

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

我真的被困在这一点上,无法前进。我真的很感激任何帮助。


共1个答案

匿名用户

get swagger.json的请求路径是< code >/swagger/v1/swagger . JSON

但是您没有在< code >入口对象中添加http规则,以重定向到< code>/swagger路径的后端