es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Acceder a las rutas versionadas devuelve un error 404 una vez que se agrega Swashbuckle a una aplicación de Web API de .NET Core.

Creé un ejemplo mínimo viable para aislar este problema que estoy experimentando. Estoy seguro de que es algo que me falta, y no las herramientas en sí. Estoy buscando ayuda para averiguar qué me falta y cómo resolverlo.

Tengo una API web básica de .NET Core 3.1. Contiene 2 controladores (Versión 1 y Versión 2) que exponen el mismo punto de conexión y tienen los mismos nombres:

  • /api/v1/foo/status
  • /api/v2/foo/status

Si no agrego Swashbuckle a la aplicación, puedo llegar a estos puntos de conexión y ver la respuesta esperada sin problemas a través de un navegador web. (La respuesta es HTTP 200 y el cuerpo de la respuesta contiene el texto esperado).

Sin embargo, una vez que agrego Swashbuckle a la solución, aparece la página de Swagger y todo parece bien, pero ya no puedo llegar a los puntos de conexión ni a través de Swagger UI ni a través del navegador mismo.

En su lugar, si se especifica la versión en la ruta usando [Route('api/{version}/foo')], la respuesta es HTTP 404 con lo siguiente en el cuerpo de la respuesta:

{
  "error": {
    "code": "UnsupportedApiVersion",
    "message": "El recurso HTTP que coincide con el URI de la solicitud 'http://localhost:3011/api/v2/foo/status' no es compatible.",
    "innerError": null
  }
}

Alternativamente, si la versión está codificada en la ruta usando [Route('api/v2/foo')], la respuesta es HTTP 400, con lo siguiente en el cuerpo de la respuesta:

{
  "error": {
    "code": "UnsupportedApiVersion",
    "message": "El recurso HTTP que coincide con el URI de la solicitud 'https://localhost:44343/api/v2/foo/status' no es compatible.",
    "innerError": null
  }
}

He intentado todo lo que he encontrado en diferentes entradas de blog, preguntas de StackOverflow y artículos de Microsoft para que esto funcione, sin éxito, incluyendo lo siguiente:

  • Agregar [ApiController] a cada controlador.
  • Agregar [ApiVersion] a cada controlador.
  • Incluir explícitamente {version:apiVersion} en cada ruta.
  • Agregar [MapToApiVersion] a cada acción del controlador.
  • Agregar un DocumentFilter y un OperationFilter al configurar SwaggerGen.

Hasta ahora, ninguna solución ha funcionado.

La solución que contiene el proyecto MVP se puede encontrar en GitHub en la siguiente ubicación: https://github.com/DreadLordMikey/NetCoreWebApiMVP

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problema

    Un experto en IT especializado en c#, asp.net-core-webapi, versionado y Swashbuckle está teniendo problemas para entender por qué los puntos finales de dos versiones de API en soluciones de .NET Core 3.1 no funcionan cuando se utiliza Swashbuckle.

    Escenario

    El sitio web contiene dos controladores, Versión 1 y Versión 2, que exponen el mismo punto final y tienen los mismos nombres:

    /api/v1/foo/status
    /api/v2/foo/status
    

    Sin la integración de Swashbuckle en la solución, los puntos finales funcionan utilizando un navegador y el cuerpo de respuesta HTTP 200 esperado.

    Una vez que se agrega Swashbuckle, el proyecto muestra la página Swagger, pero ya no es posible acceder a los puntos finales correctos tanto a través del navegador como de la interfaz de usuario de Swagger.

    Usar [Route('api/v2/foo')] codificado en la ruta da como resultado una respuesta HTTP 400 con un mensaje UnsupportedApiVersion.

    Alternativamente, al incluir la versión con una variable utilizando {version:apiVersion} en la ruta, se obtiene una respuesta HTTP 404 con el mensaje UnsupportedApiVersion.

    Solución

    El problema con los puntos finales que no funcionan cuando se utiliza Swashbuckle sigue siendo desconocido, a pesar de aplicar una variedad de métodos y soluciones al problema.

    Para aislar el problema, el experto en IT ha proporcionado un código mínimo viable que destaca el problema.

    Para ayudar al experto a determinar el problema y posiblemente proporcionar una solución, se anima a cualquiera a ver el código fuente ubicado en GitHub.

    Conclusión

    Para solucionar el problema de los puntos finales que no funcionan con Swashbuckle, se requiere un diagnóstico e investigación adicionales por parte del experto en IT, a pesar de aplicar diversas soluciones.

Comments are closed.