我正在尝试使用NSwag和Autorest为api创建代码包装器。
以前,我是使用Swashbuckle生成swagger文件的。它生成了带有格式为actionMethod
的operationId的swagger文件。这导致Autorest生成深度为1的代码客户端。所有操作都在顶级类上。
由于各种原因,我需要将摇摇欲坠的生成更改为NSwag。这将生成controller_actionMethod
格式的operationIds。这样,AutoRest会创建一个复合类,该复合类公开每个控制器带有单独操作的类。
怎么可能
注意:我知道我可以手动更改swagger.json,但是我想保持一致的自动化过程来生成代码客户端。
答案 0 :(得分:0)
似乎没有任何可用的设置,但是您可以加入NSwag的生成过程
操作处理器
class FlattenOperationsProcessor: IOperationProcessor
{
public async Task<bool> ProcessAsync(OperationProcessorContext context)
{
context.OperationDescription.Operation.OperationId = $"{context.MethodInfo.Name}";
return true;
}
}
然后将其添加到Startup.cs
document.OperationProcessors.Add(new FlattenOperationsProcessor());
答案 1 :(得分:0)
不确定在提出问题时是否可用,但这里有一个非常简单的方法:
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