.net 为什么HttpRepl找不到OpenAPI描述?命令“ls”不显示可用端点

pu3pd22g  于 2023-08-08  发布在  .NET
关注(0)|答案(4)|浏览(167)

我正在通过Microsoft Learn教程学习“Create a web API with ASP.Net Core”。
在标题下,“构建和测试web API”,在指令(5),我得到了一个响应,“无法找到OpenAPI描述”。
对于步骤(6),当执行“ls”命令时,我得到的响应是:“没有设置目录结构,所以没有什么要列出。使用'connect'命令根据OpenAPI描述设置目录结构”。我已经尝试了这里建议的“connect”命令,并尝试了“dir”作为“ls”的替代。
我可以在步骤(7)中成功地更改目录,并执行步骤(8)的GET请求,并收到预期的回复。然而,“ls”命令在这里不起作用,它真的让我很困扰,似乎是httpprepl工具的一个重要功能。
如何让“ls”命令在这里工作或者告诉我为什么它不工作?

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/>

字符串
增加的建议结果--

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`.


httprepl GitHub repoMS Docs page

a0x5cqrl

a0x5cqrl1#

对我来说,解决方案是简单地信任localhost的SSL证书,您可以使用以下命令来完成:

dotnet dev-certs https --trust

字符串
在做相同的教程时,我的一个朋友注意到,信任开发证书,已经包含在教程中,我忽略了自己做教程。这是官方帮助网站:信任Windows和macOS上的ASP.NET Core HTTPS开发证书。这可能会帮助有同样问题的人。

46scxncf

46scxncf2#

在步骤5中,HttpRepl发出警告Unable to find an OpenAPI description,这意味着它找不到swagger端点,因此ls命令无法工作。
我假设您正在使用 VS CodeASP.NET Core 5.0。下面是我运行dotnet --version的输出:

5.0.401

字符串
如果我们使用的是 Visual Studio,那么记得在创建项目时启用swagger-我使用的是 Visual Studio 2019 创建截图:
x1c 0d1x的数据

指定OpenAPI描述

要找出要使用哪个端点,请打开文件Startup.cs并找到包含文本UseSwaggerUI的代码片段。你应该会找到这个代码块:

if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI v1"));
}


使用找到的端点并运行工具,如下所示:

httprepl http://localhost:5000 --openapi /swagger/v1/swagger.json


如果您没有找到任何swagger的引用,请参阅下面的 * 上面的所有操作都不起作用,swagger is not installed*,了解如何为您的项目安装和配置swagger。

忽略您的环境

如果指定要使用的OpenAPI端点不起作用,则说明您没有在开发环境中运行Web API。因此,要么使用开发环境,要么在测试时取消if语句的注解(要设置开发环境,请参阅下面的 * 更改环境 *):

//if (env.IsDevelopment())
//{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI v1"));
//}


请记住在部署到生产环境之前还原未注解的代码(如果有的话)。

更改环境

您的Web API正在使用的配置文件在文件Properties\launchSettings.json中指定。打开文件并搜索ASPNETCORE_ENVIRONMENT。然后将找到的示例更改为:

"ASPNETCORE_ENVIRONMENT": "Development"


如果这不起作用,或者示例已经设置为“开发”,这意味着您没有使用启动设置中指定的任何配置文件。如果未使用配置文件,ASPNETCORE_ENVIRONMENT默认为“Production”。使用dotnet run命令时,--launch-profile参数允许您指定要使用的配置文件:

dotnet run --launch-profile "name_of_profile"


作为最后的手段,您可以在运行命令dotnet run之前,在您使用的shell中设置环境变量ASPNETCORE_ENVIRONMENT

巴斯

export ASPNETCORE_ENVIRONMENT=Development

CMD

set ASPNETCORE_ENVIRONMENT=Development

PowerShell

$env:ASPNETCORE_ENVIRONMENT='Development'


然后在没有配置文件的情况下运行应用程序:

dotnet run --no-launch-profile


在没有配置文件的情况下运行时,默认端口应为5000或5001。但是,读取命令的输出,以查看它分配给您的Web API的端口。
请注意,如果您使用 VS Code 运行您的项目,VS Code 可能也在.vscode\launch.json中创建了启动设置。这取决于您如何配置 VS Code 以及您允许它做什么。我找到了一些较旧的文章,这些文章声称 VS Code 的某些扩展可能会干扰启动设置,但他们没有指定是哪些。

以上都不起作用,swagger未安装

如果上面没有一个工作,这意味着你没有安装swagger。为您的项目安装swagger,完成后,再试一次。

包安装

VS Code 中打开您的项目,从 Integrated Terminal 运行以下命令,并将 WebAPI.csproj 替换为您自己的项目文件名:

dotnet add WebAPI.csproj package Swashbuckle.AspNetCore -v 5.6.3


当然,您可以从 VS Code 外部运行该命令,将您的项目文件夹作为当前工作目录。

添加和配置Swagger中间件

将Swagger生成器添加到Startup.ConfigureServices方法中的services集合中,作为方法中的最后一条语句:

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" });
    });

}


Startup.Configure方法中,在方法顶部启用中间件以提供生成的JSON文档和Swagger UI:

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 ...]
}

了解更多关于swagger、配置文件和环境的设置

Get started with Swashbuckle and ASP.NET Core
Managing Production and Development Settings in ASP.NET Core
Use multiple environments in ASP.NET Core
ASP.NET Core web API documentation with Swagger / OpenAPI

ilmyapht

ilmyapht3#

我也遇到过同样的问题。我通过以下方法解决了这个问题:
1.在Developer PowerShell(VS 2022)中,运行'dotnet run'命令。
x1c 0d1x的数据
1.保持这个powershell原样。
1.现在打开新的PowerShell并运行“httprepl https://localhost:{PORT}”
你现在应该可以运行API了。


dba5bblo

dba5bblo4#

您必须通过dotnet run连接到Web服务器。

相关问题