Aws-lambda-dotnet: Los documentos de Swagger se exponen al integrarse con la puerta de enlace de API

Creado en 30 ene. 2018  ·  22Comentarios  ·  Fuente: aws/aws-lambda-dotnet

Hola tios,

Tengo una API web central .net que tiene sus propios documentos de integración swagger expuestos a través del punto final "swagger / v1 / swagger.json". Se implementa como lambda. También configuré una puerta de enlace de API que se integra con esta lambda para exponer que son todas las API.

El problema que tengo es que no puedo acceder a los documentos de swagger a través de la URL / swagger. Siempre devuelve "mensaje: forbibbden". Definitivamente puedo acceder al swagger si ejecuto la API web localmente.

¿Algunas ideas?

Gracias

Jason

guidance

Comentario más útil

Yo también estaba teniendo el mismo problema. Tengo una solución
Asegúrese de haber agregado la etapa en un nombre en el archivo de inicio como se muestra a continuación. donde Prod es mi nombre artístico.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Solicitando a @normj que cierre esto.

Todos 22 comentarios

¿Puedes crear un repositorio de repositorio simple para que lo vea?

Tengo el mismo problema.

¿Hiciste algún progreso con este @jasondaicoder?

Mismo problema, actualice si encuentra una solución. Puedo acceder al json directamente, por ejemplo, https: //...../Prod/swagger/v1/swagger.json . Dado que API Gateway es compatible con el swagger, estaba pensando en algo mágico sobre el camino del "swagger". Pero, usando la información de esta página, http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/ , lo cambié a "Swag" y todavía tenía el mismo problema.

Interesante, cuando accede a https: //..../Prod/swagger, lo redirige a https: //.../swagger , básicamente eliminando la parte de la etapa de la ruta y de regreso a la raíz, lo que luego da como resultado el mensaje prohibido.

Realmente no chicos. Pensé que podría deberse a que se supone que la puerta de enlace api actúa solo para la API web, pero no para la interfaz de usuario relacionada. Terminé alojando la interfaz de usuario en otro lugar, pero apuntando al archivo json swagger del proyecto a través de la puerta de enlace api. Funciona.

Gracias. Hmm, es un poco doloroso tener que hacer esto :) Tengo un controlador doméstico MVC regular y una página de índice como parte de mi implementación y funciona bien. Sí, estaba leyendo una publicación en la que una persona pensó que podría estar relacionada con una respuesta que no era json, pero mi página de índice funciona bien.

Con mi solución, en realidad, solo necesita implementar la interfaz de usuario una vez. Siempre que cargue el archivo json de su proyecto, ya no tendrá que hacer nada. Alojamos los archivos de la interfaz de usuario en S3. Quizás el equipo de AWS pueda solucionar el problema más adelante.

interesante ... ¿puede implementar una interfaz de usuario .net core en S3 sin un cernícalo en ejecución? pensé que el swagger era un poco una cosa en tiempo de ejecución y necesitaba soportar los dlls en ejecución, etc., por ejemplo, no solo un conjunto estático de archivos

@normj , el proyecto es solo un c # weapi normal con punto de entrada Lamdba. Nada realmente especial. Intentaré crear un repositorio de muestra en GitHub más tarde. Para ser honesto, no creo que haya nada malo en mi proyecto, ya que otras personas están teniendo el mismo problema. Creo que podría haber algunos conflictos con los documentos de swagger integrados en la puerta de enlace de la API.

@rslangham no, no necesitas implementar tu proyecto. Todo lo que necesita es descargar los archivos estáticos de la interfaz de usuario de swagger que puede obtener del sitio de swagger (tal vez un enlace a GitHub que puede encontrar en el sitio de swagger).

@jasondaicoder gracias por la sugerencia sobre el uso de los archivos estáticos de la interfaz de

Sin embargo, realmente me gustaría encontrar la solución correcta :) Gracias de nuevo.

Hola, tengo exactamente el mismo problema, espero que se resuelva pronto.

Observando el mismo problema también.

Yo también estaba teniendo el mismo problema. Tengo una solución
Asegúrese de haber agregado la etapa en un nombre en el archivo de inicio como se muestra a continuación. donde Prod es mi nombre artístico.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Solicitando a @normj que cierre esto.

@AnandKhedkar que funcionó para mí gracias

Yo también estaba teniendo el mismo problema. Tengo una solución
Asegúrese de haber agregado la etapa en un nombre en el archivo de inicio como se muestra a continuación. donde Prod es mi nombre artístico.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Solicitando a @normj que cierre esto.

Eso muestra la página Index.html. Sin embargo, no me permite la ejecución del servicio a través de la interfaz swagger.
La ruta en la URL de solicitud para una llamada GET excluye Prod nuevamente.
Sin embargo, estoy usando c.RoutePrefix = string.Empty; para representar la página en la raíz en lugar de agregar / swagger.

¿Existe alguna propiedad que pueda establecerse para que se mantenga coherente en todas las referencias de URL relativas?

Yo también estaba teniendo el mismo problema. Tengo una solución
Asegúrese de haber agregado la etapa en un nombre en el archivo de inicio como se muestra a continuación. donde Prod es mi nombre artístico.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Solicitando a @normj que cierre esto.

Eso muestra la página Index.html. Sin embargo, no me permite la ejecución del servicio a través de la interfaz swagger.
La ruta en la URL de solicitud para una llamada GET excluye Prod nuevamente.
Sin embargo, estoy usando c.RoutePrefix = string.Empty; para representar la página en la raíz en lugar de agregar / swagger.

¿Existe alguna propiedad que pueda establecerse para que se mantenga coherente en todas las referencias de URL relativas?

Resuelto con esta solución Funciona perfectamente e incluso muestra la ruta base en el encabezado de la página swagger.

Cerrando, ya que parece que se ha encontrado la solución.

Yo también estaba teniendo el mismo problema. Tengo una solución
Asegúrese de haber agregado la etapa en un nombre en el archivo de inicio como se muestra a continuación. donde Prod es mi nombre artístico.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Solicitando a @normj que cierre esto.
En qué archivo definir esto.

Yo también estaba teniendo el mismo problema. Tengo una solución
Asegúrese de haber agregado la etapa en un nombre en el archivo de inicio como se muestra a continuación. donde Prod es mi nombre artístico.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Solicitando a @normj que cierre esto.

esto funcionó para mí.
Gracias

Me encontré con el mismo problema; pero HARDCODING PROD (el nombre de la etapa) en el código NO ES UNA OPCIÓN ¿Hay alguna forma de identificar en qué etapa de implementación de la puerta de enlace API se está ejecutando una lambda? un entorno de AWS var o algo así?

@grahamehorner Aquí lo que hice para resolver el problema sin codificación. Funcionó en mi máquina local y en Lambda

app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("v1/swagger.json", "GST Console API - V1");
});

Básicamente, configure el punto final con c.SwaggerEndpoint() usando la URL de ruta relativa sin "swagger" y "/" inicial.

Si proporcionamos una URL de ruta relativa sin "/" c.SwaggerEndpoint() a

AWS Serverless Url + "/" + c.RoutePrefix + "/" + the supplied url

donde c.RoutePrefix se establece en 'swagger' de forma predeterminada

Por ejemplo, si su URL sin servidor de AWS es ' https://xyz.central.amazonaws.com/Prod ', su URL absoluta será ' https://xyz.central.amazonaws.com/Prod/swagger/v1/swagger .json '

¿Fue útil esta página
0 / 5 - 0 calificaciones