2

我使用 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 请求

ETC

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

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

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

如何实现 IOperationNameGenerator?

4

1 回答 1

2

在您的 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的源代码中使用的默认值

于 2021-02-09T02:42:42.803 回答