C# Swashbuckle设置手动操作ID,使用同一动词执行多个操作

C# Swashbuckle设置手动操作ID,使用同一动词执行多个操作,c#,asp.net-web-api,swagger,asp.net-web-api-routing,swashbuckle,C#,Asp.net Web Api,Swagger,Asp.net Web Api Routing,Swashbuckle,我需要知道是否可以设置自定义operationid或命名约定,我的意思是我知道可以通过生成operationid的方式覆盖操作筛选器 在SwaggerConfig.cs中 c.OperationFilter<MultipleOperationsWithSameVerbFilter>(); c.操作过滤器(); 现在,这有助于转换昂首阔步的描述,请检查以下内容: 很好,现在我遇到了另一个问题,类似于五月的例子:在同一个控制器上,我有两个端点 Post:/customer b

我需要知道是否可以设置自定义operationid或命名约定,我的意思是我知道可以通过生成operationid的方式覆盖操作筛选器

在SwaggerConfig.cs中

 c.OperationFilter<MultipleOperationsWithSameVerbFilter>();
c.操作过滤器();
现在,这有助于转换昂首阔步的描述,请检查以下内容:

很好,现在我遇到了另一个问题,类似于五月的例子:在同一个控制器上,我有两个端点

  • Post:/customer boddy:{email,location….}
  • Post:/customer/search boddy:{a filter,随便什么}
该示例并不完全正确(最后一篇文章应该是get),但仍然假设webapi不能更改(用于分离的新控制器)。对于这种特殊情况,我将尝试找出一种方法,以某种方式为每个操作生成operationId Different,但我的问题是:

是否有可能以某种方式装饰控制器动作,类似于 [JsonIgnore]或[Route(“customer/delete”)],明确说明操作ID


编辑此答案与Swashback 5.6和.NET Framework有关。请阅读Swashback和.NET Core

为此,您可以使用Swashback提供的
SwaggerOperationAttribute

[SwaggerOperation("get")]
public IEnumerable<Contact> Get()
{
    ....
}

[SwaggerOperation("getById")]
public IEnumerable<Contact> Get(string id)
{
    ...
}
[SwaggerOperation(“get”)]
公共IEnumerable Get()
{
....
}
[大摇大摆的操作(“getById”)]
公共IEnumerable Get(字符串id)
{
...
}

顺便说一下,您也可以使用该属性将标记和方案添加到操作中。查看一下Swashback 5.0的

,您可以使用
名称
属性。您可以将其设置为任何
字符串
,但我喜欢这样使用
nameof
nameof(ActualMethodName)


列出了一些其他选项

这不应该是
“Contact_get”
“Contact_getById”
?由于某种原因[SwaggerOperation(“operationId”)]在我们的案例中不起作用。使用.Net Core 3.1和Swashback 5.6.0。但是[HttpGet(Name=“operationId”)]可以工作。您必须设置operationId属性[SwaggerOperation(operationId=“MyCustomName”)]、NetCore 3.1、swash*5.2.x您也可以在此处使用
[action]
[controller]
变量。例如:
[HttpGet(Name=“[controller]\u[action]”)在ContactController.Nice的HttpGet方法上生成
Contact\u Get
。我不知道那件事。对于那些有偏好的人来说,这是另一个选择。一、 我自己更喜欢完全控制这个名字。我更喜欢
方法的
名称。通常来说,客户的消费者不在乎是获取还是发布还是放置等。。。所以说,提供这一点真的没有任何价值。请看这里的问题,
[SwaggerOperation("get")]
public IEnumerable<Contact> Get()
{
    ....
}

[SwaggerOperation("getById")]
public IEnumerable<Contact> Get(string id)
{
    ...
}
[HttpGet("{id:int}", Name = nameof(GetProductById))]
public IActionResult GetProductById(int id) // operationId = "GetProductById"'
[HttpGet("{id:int}", Name = "GetProductById")]
public IActionResult GetProductById(int id) // operationId = "GetProductById"'