Estoy trabajando en los tutoriales de Microsoft Learn para " Crear una API web con ASP.Net Core ".
Bajo el encabezado "Crear y probar la API web", en la instrucción (5) recibo una respuesta, "No se puede encontrar una descripción de OpenAPI".
Para el paso (6), cuando ejecuto el comando "ls", obtengo la respuesta: "No se ha establecido una estructura de directorio, por lo que no hay nada que enumerar. Use el comando 'conectar' para establecer una estructura de directorio basada en una descripción de OpenAPI". Probé el comando "conectar" sugerido aquí y probé "dir" como alternativa a "ls".
Puedo cambiar directorios con éxito en el paso (7) y ejecutar la solicitud GET para el paso (8) y recibir la respuesta esperada. Sin embargo, realmente me molesta que el comando "ls" no funcione aquí y parece una función importante de la herramienta httprepl.
¿Cómo puedo hacer que el comando "ls" funcione aquí o decirme por qué no funciona?
C:\Users\xxxx\source\repos\Learn\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. http://localhost:5000/>RESULTADOS AÑADIDOS DE SUGERENCIAS--
C:\Users\xxxx\source\repos\Learn\ContosoPizza>dotnet --version 3.1.412 C:\Users\xxxx\source\repos\Learn\ContosoPizza>dotnet add WebAPI.csproj package Swashbuckle.AspNetCore -v 5.6.3 Could not find project or directory `WebAPI.csproj`.En el paso 5 HttpRepl emite la advertencia Unable to find an OpenAPI description , lo que significa que no puede encontrar el punto final de Swagger y, por lo tanto, el comando ls no funcionará.
Supongo que está utilizando VS Code y ASP.NET Core 5.0 . Aquí está mi resultado de ejecutar dotnet --version :
5.0.401Si estamos usando Visual Studio , recuerde habilitar swagger cuando cree el proyecto. Estoy usando Visual Studio 2019 para crear la captura de pantalla:
Para saber qué punto de enlace usar, abra el archivo Startup.cs y busque el fragmento de código que contiene el texto UseSwaggerUI . Deberías encontrar este bloque de código:
if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI v1")); }Use el punto final que encuentre y ejecute la herramienta de esta manera:
httprepl http://localhost:5000 --openapi /swagger/v1/swagger.jsonSi no encuentra ninguna referencia a swagger, consulte Ninguno de los anteriores funcionó, swagger no está instalado a continuación, para saber cómo instalar y configurar swagger para su proyecto.
Si no funciona especificar el punto final de la API abierta, entonces no está ejecutando su API web en un entorno de desarrollo. Por lo tanto, use un entorno de desarrollo o elimine el comentario de la declaración if durante la prueba (para configurar su entorno para el desarrollo, consulte Cambiar su entorno a continuación):
//if (env.IsDevelopment()) //{ app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI v1")); //}Recuerde restaurar el código que descomentó, si corresponde, antes de implementarlo en producción.
El perfil que usa su API web se especifica en el archivo Properties\launchSettings.json . Abra el archivo y busque ASPNETCORE_ENVIRONMENT . Luego cambie las instancias que encuentre a:
"ASPNETCORE_ENVIRONMENT": "Development" Si esto no funciona, o si las instancias ya estaban configuradas en "Desarrollo", significa que no está utilizando ninguno de los perfiles especificados en la configuración de inicio. Si no se utiliza ningún perfil, el valor predeterminado de ASPNETCORE_ENVIRONMENT es "Producción". Al usar el comando dotnet dotnet run , el parámetro --launch-profile le permite especificar qué perfil usar:
dotnet run --launch-profile "name_of_profile" Como último recurso, puede configurar la variable de entorno ASPNETCORE_ENVIRONMENT en el shell que está utilizando, antes de ejecutar el comando dotnet run :
Intento
export ASPNETCORE_ENVIRONMENT=DevelopmentCMD
set ASPNETCORE_ENVIRONMENT=DevelopmentPotencia Shell
$env:ASPNETCORE_ENVIRONMENT='Development'Luego ejecute la aplicación sin un perfil:
dotnet run --no-launch-profileLos puertos predeterminados, cuando se ejecuta sin un perfil, deben ser 5000 o 5001. Pero lea el resultado del comando para ver qué puertos asigna a su API web.
Tenga en cuenta que si usa VS Code para ejecutar su proyecto, es posible que VS Code también haya creado configuraciones de inicio en .vscode\launch.json . Depende de cómo haya configurado VS Code y de lo que le permita hacer. Encontré algunos artículos más antiguos que afirman que algunas extensiones para VS Code pueden interferir con la configuración de inicio, pero no especificaron cuáles.
Ninguno de los anteriores funcionó, significa que no tienes Swagger instalado. Instale swagger para su proyecto y cuando haya terminado, inténtelo de nuevo.
Instalación del paquete
Abra su proyecto en VS Code y ejecute el siguiente comando desde la Terminal integrada y reemplace WebAPI.csproj con el nombre de su propio archivo de proyecto:
dotnet add WebAPI.csproj package Swashbuckle.AspNetCore -v 5.6.3Por supuesto, puede ejecutar el comando desde fuera de VS Code , con la carpeta de su proyecto como el directorio de trabajo actual.
Agregar y configurar el software intermedio de Swagger
Agregue el generador Swagger a la colección de servicios en el método Startup.ConfigureServices , como la última instrucción del método:
public void ConfigureServices(IServiceCollection services) { [... other code here ...] // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI", Version = "v1" }); }); } En el método Startup.Configure , habilite el middleware para entregar el documento JSON generado y la interfaz de usuario de Swagger, en la parte superior del método:
public void Configure(IApplicationBuilder app) { // Enable middleware to serve generated Swagger as a JSON endpoint. app.UseSwagger(); // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.), // specifying the Swagger JSON endpoint. app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"); }); [... other code here for setting up routing and the like ...] } Comience con Swashbuckle y ASP.NET Core
Administrar la configuración de producción y desarrollo en ASP.NET Core
Utilice varios entornos en ASP.NET Core
Documentación de la API web de ASP.NET Core con Swagger/OpenAPI
La solución para mí fue simplemente confiar en la certificación SSL de localhost, lo cual puede hacer con este comando:
dotnet dev-certs https --trustMientras hacía el mismo Tutorial, un amigo mío notó que confiar en el certificado de desarrollo ya estaba cubierto por el Tutorial, que había pasado por alto al hacer el Tutorial yo mismo. Este es el sitio de ayuda oficial: Confíe en el certificado de desarrollo HTTPS de ASP.NET Core en Windows y macOS . Tal vez esto todavía ayude a alguien con el mismo problema.
Debe estar conectado al servidor web a través de dotnet run.