NSwagStudio,在使用 NSwag 生成的客户端方法名称中包含 Http 请求方法名称

Ole*_*our 3 asp.net-core angular nswagstudio

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

该架构包含一个/contract支持GETPOSTrequests 的端点,以及一个/contract/{ID}支持GET和requestsPOST的端点DELETE

生成的客户端具有以下方法:

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

我希望它生成名为:

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

ETC

问题的答案是“实现并提供自己的 IOperationNameGenerator”请参阅/sf/answers/3495479221/

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

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

如何实现 IOperationNameGenerator?

Ada*_*dam 6

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

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

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

请注意,这是我在此处的ActionDescriptor.AttributeRouteInfo?.Name源代码中使用的默认值