Román, miembro de este gran equipo, nos ha hecho el favor de crear esta crónica porque conoce a la perfección dicho tema.
Solución:
Entonces, después de mucho solucionar los problemas, se redujo básicamente a dos cosas, pero siento que, en general, esto podría ser útil para alguien más en el futuro, así que estoy publicando una respuesta.
Primero, si alguna vez se quedó con el error mencionado anteriormente, la mejor manera de ver realmente lo que está sucediendo es agregando la siguiente línea a su método Configure ()
app.UseDeveloperExceptionPage();
Ahora, si navega a la página ‘swagger/v1/swagger.json’, debería ver más información que lo orientará en una dirección útil.
Segundo, ahora para mí el error fue algo así como
‘Múltiples operaciones con ruta ‘alguna_ruta’ y método ‘GET’ ‘
Sin embargo, estas API estaban ubicadas dentro de las bibliotecas de dependencia, por lo que no pude aplicar una solución en el punto de definición. Como solución alternativa, descubrí que agregar la siguiente línea a su método ConfigureServices() resolvió el problema
services.AddSwaggerGen(c =>
c.SwaggerDoc("v1", new Info Title = "API WSVAP (WebSmartView)", Version = "v1" );
c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); //This line
);
Finalmente, después de todo eso, pude generar un archivo JSON, pero aún así no pude abrir la interfaz de usuario. Para que esto funcionara, tuve que modificar el punto final en Configure ()
app.UseSwaggerUI(c =>
c.SwaggerEndpoint("./v1/swagger.json", "My API V1"); //originally "./swagger/v1/swagger.json"
);
No estoy seguro de por qué esto fue necesario, aunque puede valer la pena señalar que el directorio virtual de la aplicación web está alojado en IIS, lo que podría tener algún efecto.
Espero que esto ayude a alguien en el futuro.
He estado trabajando con .Net Core 3.1 y dediqué algún tiempo a descubrir y comprender lo que estaba sucediendo.
El problema puede surgir por muchas razones diferentes:
-
Errores de configuración de Swagger
-
Clases con el mismo nombre pero en diferentes espacios de nombres
-
Métodos públicos sin el resto attribute (Obtener, Publicar, etc.)
Primero, eche un vistazo al enlace a continuación solo para verificar si su configuración está bien:
Agregue la documentación de la API de Swagger (OpenAPI) en ASP.NET Core 3.1
Entonces,
Un buen consejo para descubrir el problema es ejecutar la aplicación sin usar IISExpress y verificar el registro de la consola. Cualquier error encontrado para generar la documentación se mostrará allí.
En mi caso, el problema era que tenía un método público (que debería ser privado) sin descanso attribute:
Después de cambiar el método de público a privado, resuelvo el problema.
Tuve un problema similar, lo resolví usando el Route
attribute en el método del controlador infractor:
[HttpGet, Route("Throw")]
public ActionResult Throw()
_logger.LogInformation("I think I am going to throw up");
throw new NotSupportedException("For testing unhandled exception logging.");
sentí eso ResolveConflictingActions
potencialmente puede barrer un problema real debajo de la alfombra.
Recuerda recomendar este ensayo si te valió la pena.