I need to know if it's possible to set up custom operationid, or a naming convention, I mean I know that operation filter can be overwritten the way how operationId is generated
using Swashbuckle.Swagger;
using System.Web.Http.Description;
namespace Something
{
public class MultipleOperationsWithSameVerbFilter : IOperationFilter
{
public void Apply(
Operation operation,
SchemaRegistry schemaRegistry,
ApiDescription apiDescription)
{
if (operation.parameters != null)
{
operation.operationId += "By";
foreach (var parm in operation.parameters)
{
operation.operationId += string.Format("{0}",parm.name);
}
}
}
}
}
in SwaggerConfig.cs
c.OperationFilter<MultipleOperationsWithSameVerbFilter>();
Now this is helpful transforming swagger description, check bellow:
All good, now I endup in a darker place, example similar with may cases: on same controller I have two endpoints
- Post: /customer boddy: {email, location....}
- Post: /customer/search boddy: {a filter, whatever}
The example is not quite correct (last post should be a get) but still le assume that webapi cannot be changed (new controller for separation) for this particular case I will try to figure out a way to generate operationId diffrent for each action somehow, but my question is this:
Is it possible to decorate somehow the controller actions similar with [JsonIgnore] or with [Route("customer/delete")], to be explicit about the operationId.
For swashbuckle 5.0, you can use the
Name
attributeThere are a few other options listed here
You can use the
SwaggerOperationAttribute
provided by Swashbuckle for that.You can use that attribute to add tags and schemes to your operation as well by the way. Have a look at the source code