14

When I generate a C# client for an API using NSwag, where the API includes endpoints that can be used with multiple Http request types (e.g. POST, GET) the client generates a method for each request with the same base name, plus a number.

E.g. Using this API: https://api.premiumfunding.net.au/assets/scripts/swagger/v1/swagger.json

The schema contains an endpoint /contract that supports GET and POST requests, and an endpoint /contract/{ID} that supports GET, POST and DELETE requests.

The generated client has methods:

  • ContractAsync for GET requests without ID
  • Contract2Async for POST requests without ID
  • Contract3Async for GET requests with ID
  • Contract4Async for POST requests with ID
  • Contract5Async for DELETE requests with ID

I would like it to generate methods named:

  • GetContractAsync for GET requests without ID
  • PostContractAsync for POST requests without ID
  • GetContractAsync for GET requests with ID (method overload)
  • PostContractAsync for POST requests with ID (method overload)
  • DeleteContractAsync for DELETE requests with ID

At the moment I am just renaming the methods manually.

Is it possible to configure NSwag to generated these method names?

(Or is there an alternative tool that will give me this result?)

Ergwun
  • 12,579
  • 7
  • 56
  • 83

1 Answers1

2

You can implement and provide an own IOperationNameGenerator:

https://github.com/RSuter/NSwag/blob/master/src/NSwag.CodeGeneration/OperationNameGenerators/IOperationNameGenerator.cs

Another option would be to preprocess the spec and change the “operationId”s to the form “controller_operation” (simple console app based on the NSwag.Core package)

Rico Suter
  • 11,548
  • 6
  • 67
  • 93
  • 10
    I did not find an example on how to plug in my own IOperationNameGenerator in my MVC app. I would have expected that the configuration passed to services.AddSwaggerDocument would have a provision for that. I would appreciate a code example "for dummies". – Berend Engelbrecht Aug 06 '19 at 16:25