如何从Swagger文档方法中删除控制器名称

时间:2020-01-23 18:30:33

标签: c# swagger-ui swashbuckle

我正在使用Swashbuckle在我的C#控制器中包含Swagger文档 如果我有一个控制器,如下所示:

public class CommandController : ApiController
{
    public CommandResult Cancel(...)
    { ...}

    public CommandResult Status(...)
    { ...}

}

然后我可以通过http://localhost/swagger/ui/docs获取文档,并以HTML或任何其他格式生成该文档,其外观如下:

REST API Docs

在上面,左侧的命令以控制器名称为前缀。

是否有一种方法可以删除控制器前缀,并且仅具有方法名称?

3 个答案:

答案 0 :(得分:2)

我有类似的问题,我只是在官方文档(link)中找到了

选项2)提供自定义策略

// Startup.cs
services.AddSwaggerGen(c =>
{
    ...

    // Use method name as operationId
    c.CustomOperationIds(apiDesc =>
    {
        return apiDesc.TryGetMethodInfo(out MethodInfo methodInfo) ? methodInfo.Name : null;
    });
})

// ProductsController.cs
[HttpGet("{id}")]
public IActionResult GetProductById(int id) // operationId = "GetProductById"

答案 1 :(得分:1)

(由NanoWar做出的)对此GitHub问题的答复似乎回答了您的问题:https://github.com/swagger-api/swagger-codegen/issues/6164

它涉及向您的SwaggerConfig添加一个OperationFilter。

答案 2 :(得分:0)

对于遇到 swagger 生成的接口、模型或服务名称问题的任何人,you may find this bash script helpful 会预处理 swagger 文件,并对生成的输出文件进行后处理。