angular - NSwagStudio,在NSwag生成的客户端方法名中包含Http请求方法名

标签 angular asp.net-core nswagstudio

我使用 NSwagStudio 为 .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”选项卡包含几个自定义实现,但没有提到“IOperationNameGenerator”

如何实现 IOperationNameGenerator?

最佳答案

在您的 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

关于angular - NSwagStudio,在NSwag生成的客户端方法名中包含Http请求方法名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62676722/

相关文章:

c# - 无法从输入的模板名称中确定所需的模板 : blazorserverside

c# - 使用 Swashbuckle 5.x 在通用 T 参数引用属性上指定 nullable = true

Angular Ant Design NG Zorro Table-无法显示数据

nswagstudio - 更改 NSwagStudio 序列化设置以允许空值

Angular Http 不工作。 Promise 与 Observable 方法混合

javascript - 我的问题是关于无法绑定(bind)到 'ngFor' 因为它不是 'li' 的已知属性,为什么会收到此错误?

angular - 谷歌标签管理器没有在 Firefox 中触发事件

javascript - Angular : Conditionally changing FormControl

docker - Docker中的Dotnet Core开发

ASP.Net Core app.UseStaticFiles 在生产 (Azure) 中不起作用,对静态文件的调用会下降到默认路由