ASP.NET Core 项目的 Visual Studio 中的“REST API 客户端”选项?

Posted

技术标签:

【中文标题】ASP.NET Core 项目的 Visual Studio 中的“REST API 客户端”选项?【英文标题】:"REST API Client" option in Visual Studio for ASP.NET Core projects? 【发布时间】:2016-06-22 05:11:12 【问题描述】:

我已经在 Azure 中启动并运行了一个 ASP.NET REST API。从 Visual 中较旧的 .NET 4.5 项目中,我使用此菜单选项生成了一个客户端:

但是当我创建一个新的 ASP.NET Core (ASP.NET 5) 项目,并且想要生成客户端时没有这样的选项:

在 ASP.NET Core 项目中为我的 REST api 生成客户端的预期方式是什么?

【问题讨论】:

这不会回答你的问题,但你应该看看 AutoRest。 【参考方案1】:

在 ASPNET Core 1.0 上,方法(至少现在,情况可能会改变)是使用 Swagger 生成 REST API 文档,一旦你这样做了,你可以使用 AutoRest 自动生成多个客户端语言。

要在核心应用程序中使用 Swagger,请添加您的 projects.json 文件:

"dependencies": 
    ...
    "Swashbuckle": "6.0.0-rc1-final"
,

然后在你的 Startup.cs 文件中,你可以添加初始化:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

    //other uses

    //this generates the swagger.json file
    app.UseSwaggerGen();

    //this is optional, it will generate a visual website for your documentation
    app.UseSwaggerUi();

UseSwaggerUi 将在http://yourdomain/swagger/ui/index.html 中生成带有“人类可读”内容的 URL。UseSwaggerGen 将在 swagger.json 中生成 swagger.json 文件。

最后,你需要装饰你的方法,告诉 Swagger 他们提供什么样的输出(输入是自动检测的),通过添加如下内容:

[Produces(typeof(MyItemClass))]
[SwaggerResponse(System.Net.HttpStatusCode.OK, Type = typeof(MyItemClass))]
[HttpGet("id")]
public IActionResult Get(string id)

    if (string.IsNullOrEmpty(id))
    
        return HttpBadRequest();
    
    var item = _service.GetRecord(id);
    if (item == null)
    
        return HttpNotFound();
    
    return new ObjectResult(item);

希望它有助于清理问题。

更新:要使用 AutoRest 生成客户端,只需转到命令提示符(安装了 AutoRest)并浏览到您的项目文件夹,然后键入:

autorest -Namespace YourDesiredNamespace -Input http://yourapi/swagger/v1/swagger.json

这将在您的项目中创建一个“Generated”文件夹,其中包含所有文件和一个代理类,您甚至可以在 Startup.cs 文件中使用并定义依赖注入。

public void ConfigureServices(IServiceCollection services)

//....
services.AddSingleton<IYourApi>(provider =>

    return new YourAPI(new Uri("http://yourapi"));
);

【讨论】:

您好,包含 API 的项目已经启动并运行。它正在使用 Swagger,一切都很好。问题是当使用 CLIENT 是 ASP.NET Core 项目时。在较旧的 VS 项目中,我可以将它指向我现有的 swagger 文件,但我不能在 ASP.NET Core 项目的 GUI 中这样做。我会看看 AutoRest,看看它给了我什么。 那么 AutoRest 就可以工作了,我们使用 REST APIs 创建的 ASP.NET Core 部署为 Azure API 应用程序,并在部署为 Azure Web 应用程序的 ASP.NET Core MVC 项目上使用它们,它的工作原理是盒子。没有 GUI 组件了,可能以后会加,ASP.NET Core 太新而且会不断变化,Tooling 可能跟不上。【参考方案2】:

我也遇到了这个问题,所以我构建了一个名为REST API Client Code Generator 的工具来解决它。我在团队中工作,我们使用 AutoRest、NSwag 和 Swagger Codegen 等工具来生成我们的 REST API 客户端并从 .NET Core Web 应用程序中使用它。 Visual Studio 中的“添加新的 - REST API 客户端...”工具并不总是有效,并且在重新生成客户端时非常麻烦

这会将 OpenAPI 规范文件 (Swagger.json) 添加到项目中并设置自定义工具,以便每次对其进行更改时都会重新生成 REST API 客户端代码。您也可以右键单击 Swagger.json 文件并切换代码生成器

对于 NSwag Studio 文件,您也可以右键单击并重新生成

我构建该工具主要是为了个人使用和在我的团队中使用,但如果您发现它有用并且认为它缺少您真正需要的东西,请联系

【讨论】:

以上是关于ASP.NET Core 项目的 Visual Studio 中的“REST API 客户端”选项?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core 项目的 Visual Studio 中的“REST API 客户端”选项?

从模板 Visual Studio 创建 Blazor(ASP.NET Core 托管)项目

Visual Studio 2015 没有将 TypeScript 编译为 ASP.NET Core 项目的一部分?

如何使用 Visual Studio 2019 在 Docker 容器中运行 ASP.NET Core 3.1 项目?

Visual Studio 2019 中默认的 ASP.NET Core + React 模板不起作用

带有 ASP.NET Core 的 Visual Studio 2019 挂起(无响应)