我使用NSwagStudio为.Net Core 3.1 API生成Angular客户端。 该API包含可与多种Http请求类型(例如POST,GET)一起使用的端点。 客户端会为每个请求使用相同的基本名称以及一个数字生成一个方法。
该模式包含一个支持/contract
和GET
请求的端点POST
,以及一个支持/contract/{ID}
,GET
和{ POST
个请求。
生成的客户端具有如下方法:
DELETE
用于不带ID的GET请求ContractAsync
用于不带ID的POST请求Contract2Async
用于ID为的GET请求Contract3Async
用于ID为的POST请求Contract4Async
用于ID为ID的DELETE请求我希望它生成名为:
的方法Contract5Async
用于不带ID的GET请求GetContractAsync
用于不带ID的POST请求等
该问题的答案是“实现并提供自己的IOperationNameGenerator” 参见https://stackoverflow.com/a/49935417/4180382
我不知道如何实现和提供此IOperationNameGenerator。
“通过反射的Web Api”选项卡包含几个自定义实现,但未提及“ IOperationNameGenerator”
如何实现IOperationNameGenerator?
答案 0 :(得分: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
是我在源代码 here