【问题标题】:NSwagStudio, include Http request method name in client method names generated with NSwagNSwagStudio,在使用 NSwag 生成的客户端方法名称中包含 Http 请求方法名称
【发布时间】:2020-10-21 21:28:10
【问题描述】:

我使用 NSwagStudio 为 a.Net Core 3.1 API 生成一个 Angular 客户端。 API 包括可用于多种 Http 请求类型(例如 POST、GET)的端点。 客户端为每个请求生成一个具有相同基本名称的方法,外加一个数字。

架构包含一个端点 /contract 支持 GETPOST 请求,以及一个端点 /contract/{ID} 支持 GETPOSTDELETE 请求。

生成的客户端有如下方法:

  • ContractAsync 用于没有 ID 的 GET 请求
  • Contract2Async 用于没有 ID 的 POST 请求
  • Contract3Async 用于带有 ID 的 GET 请求
  • Contract4Async 用于带有 ID 的 POST 请求
  • Contract5Async 用于 ID 为 DELETE 的请求

我希望它生成名为:

  • GetContractAsync 用于没有 ID 的 GET 请求
  • PostContractAsync 用于没有 ID 的 POST 请求

问题的答案是“实现并提供自己的 IOperationNameGenerator” 见https://stackoverflow.com/a/49935417/4180382

我不知道如何实现和提供这个 IOperationNameGenerator。

“通过反射的 Web Api”选项卡包含几个自定义实现,但未提及“IOOperationNameGenerator”

如何实现 IOperationNameGenerator?

【问题讨论】:

  • 你找到了吗?
  • @gerb0n 不,我没有!
  • 我也不知道如何提供自定义IOperationNameGenerator,但我能够使用IOperationProcessor 中所述的IOperationProcessor 更改生成的OperationID,从而更改生成的客户端方法名称this answer.

标签: angular asp.net-core nswagstudio


【解决方案1】:

在您的 Startup.cs 中执行以下操作:

services.AddSwaggerGen(c =>
{
    ...
    c.CustomOperationIds(d => d.ActionDescriptor is ControllerActionDescriptor controllerActionDescriptor ? controllerActionDescriptor.MethodInfo.Name : d.ActionDescriptor.AttributeRouteInfo?.Name);
});

同样可以通过c.SwaggerGeneratorOptions.OperationIdSelector设置

注意ActionDescriptor.AttributeRouteInfo?.Name是我在源代码here中使用的默认值

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-24
    • 2011-11-25
    • 2021-11-18
    • 2016-09-20
    • 2021-08-20
    • 1970-01-01
    • 2010-09-12
    • 2017-02-22
    相关资源
    最近更新 更多