Estoy trabajando en los tutoriales de Microsoft Learn para "Crear una API web con ASP.Net Core".
Usé .NET5
Tengo un problema cuando ejecuto el comando:
httprepl connect http://localhost:5000Recibo una respuesta, "No se puede encontrar una descripción de OpenAPI".
Y el siguiente comando "ls" me devuelve de él sin puntos finales de tropa.
c:/xxx/Source/Repos/ContosoPizza $ httprepl http://localhost:5000 (Disconnected)> connect http://localhost:5000 Using a base address of http://localhost:5000/ Unable to find an OpenAPI description For detailed tool info, see https://aka.ms/http-repl-doc http://localhost:5000/> ls No directory structure has been set, so there is nothing to list. Use the "connect" command to set a directory structure based on an OpenAPI description.Probé todas las soluciones ofrecidas por @Gowiser en la pregunta lanzada por @Nuse ¿Por qué HttpRepl no puede encontrar una descripción de OpenAPI? El comando "ls" no muestra los puntos finales disponibles
Pero nada funcionó.
Supongo que está siguiendo los pasos descritos en el ejercicio 'Crear un proyecto de API web' del curso Crear una API web con ASP.NET Core .
Antes de pasar al paso 5, asegúrese de que en su proyecto haya:
services.AddSwaggerGen() en el método Startup.ConfigureServices()app.UseSwagger() en el método Startup.Configure()Aquí hay una versión funcional de Startup.cs:
using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.OpenApi.Models; namespace ContosoPizza { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "ContosoPizza", Version = "v1" }); }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ContosoPizza v1")); } app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } } Llamar a ls en la sesión httprepl muestra los resultados esperados:
❯ httprepl http://localhost:5000 (Disconnected)> connect http://localhost:5000 Using a base address of http://localhost:5000/ Using OpenAPI description at http://localhost:5000/swagger/v1/swagger.json For detailed tool info, see https://aka.ms/http-repl-doc http://localhost:5000/> ls . [] WeatherForecast [GET] http://localhost:5000/>Aquí puede encontrar un proyecto completo para este ejercicio.
Trabajando a través de Crear una API web con ASP.NET Core Controllers , también me encontré con el error
No se puede encontrar una descripción de OpenAPI
El tutorial usa dotnet 6, yo estaba usando dotnet core 3.1.
Hice los cambios de las respuestas de sasha anteriores y tuve que agregar estos paquetes
dotnet add package Microsoft.OpenApi --version 1.2.3 dotnet add package Swashbuckle.AspNetCore.Swagger --version 6.2.3 dotnet add package Swashbuckle.AspNetCore.SwaggerUI --version 6.2.3 dotnet add package Swashbuckle.AspNetCore.SwaggerGen --version 6.2.3Después de todo eso, todavía recibí mensajes de error. En el paso 4 del Ejercicio: crear un proyecto de API web, se escribe lo siguiente
Conéctese a nuestra API web ejecutando el siguiente comando:
httprepl https://localhost:{PORT}Como alternativa, ejecute el siguiente comando en cualquier momento mientras se ejecuta HttpRepl:
(Disconnected)> connect https://localhost:{PORT}
No sabía que ejecutar httprepl así
httprepl https://localhost:{PORT} aún requiere que su aplicación web se esté ejecutando. Por lo tanto, debe abrir una segunda terminal (cmd.exe) para ejecutar su proyecto webapi dotnet dotnet run . Después de eso, puede conectarse a los documentos de Swagger usando httprepl como este
connect http://localhost:5000 --verbose --openapi /swagger/v1/swagger.json http://localhost:5000/> ls . [] WeatherForecast [GET] http://localhost:5000/> cd WeatherForecast /WeatherForecast [GET] http://localhost:5000/WeatherForecast> get HTTP/1.1 200 OKEsto hizo el truco para mí.
Swashbuckle.AspNetCore - Primeros pasos contiene
Opcionalmente, inserte el middleware swagger-ui si desea exponer la documentación interactiva, especificando los puntos finales Swagger JSON para alimentarlo.
app.UseSwaggerUI(c => { c.SwaggerEndpoint("v1/swagger.json", "My API V1"); });
Si cambia startup.cs para incluir esto
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "ContosoPizza v1")); } .... Obtiene una buena interfaz gráfica de usuario en http://localhost:5000/swagger/ que se ve así
ejecute este comando primero:
dotnet dev-certs https --trust