How to include Http request method name in client method names generated with NSwag
Asked Answered
P

1

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?)

Patentee answered 18/4, 2018 at 4:26 Comment(0)
E
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)

Eucharist answered 20/4, 2018 at 6:33 Comment(1)
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".Maund

© 2022 - 2024 — McMap. All rights reserved.