我使用 NSwagStudio 为 .Net Core 3.1 API 生成了一个 Angular 客户端。 API 包括可用于多种 Http 请求类型(例如 POST、GET)的端点。 客户端为每个具有相同基本名称的请求生成一个方法,外加一个数字。
该架构包含一个端点/contract
,它支持GET
和POST
请求,以及一个端点/contract/{ID}
支持 GET
、POST
和 DELETE
请求。
生成的客户端有如下方法:
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/