NSwag: Duplicate function implementation while creating restful service.

Hi, I’m trying to create my service as restful, but when I run Refresh.bat file and run npm start. It gives errors.

[Route("api/services/app/Test")]
[HttpPost]
public async Task CreateTest(TestDetailsDto input)

[Route("api/services/app/Test")]
[HttpDelete]
public async Task DeleteTest(EntityDto input)

[Route("api/services/app/Test")]
[HttpGet]
public async Task GetTest(EntityDto input)

[Route("api/services/app/Test")]
[HttpPut]
public async Task UpdateTest(TestDetailsDto input)

Errors:

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6197,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6230,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6252,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6267,16): The type argument for type parameter ‘R’ cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate ‘void’ is not a valid type argument because it is not a supertype of candidate ‘TestDetailsDto’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6281,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6300,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6315,16): The type argument for type parameter ‘R’ cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate ‘number’ is not a valid type argument because it is not a supertype of candidate ‘TestDetailsDto’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6329,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6351,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6370,16): The type argument for type parameter ‘R’ cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate ‘void’ is not a valid type argument because it is not a supertype of candidate ‘TestDetailsDto’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6384,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-list.component.ts (210,45): Property ‘deleteTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (102,41): Property ‘getTestDetailsforEdit’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (163,37): Property ‘createTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (206,37): Property ‘createTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (218,37): Property ‘updateTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6197,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6230,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6252,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6267,16): The type argument for type parameter ‘R’ cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate ‘void’ is not a valid type argument because it is not a supertype of candidate ‘TestDetailsDto’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6281,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6300,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6315,16): The type argument for type parameter ‘R’ cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate ‘number’ is not a valid type argument because it is not a supertype of candidate ‘TestDetailsDto’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6329,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6351,5): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6370,16): The type argument for type parameter ‘R’ cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate ‘void’ is not a valid type argument because it is not a supertype of candidate ‘TestDetailsDto’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/shared/service-proxies/service-proxies.ts (6384,15): Duplicate function implementation.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-list.component.ts (210,45): Property ‘deleteTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (102,41): Property ‘getTestDetailsforEdit’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (163,37): Property ‘createTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (206,37): Property ‘createTest’ does not exist on type ‘TestServiceProxy’.

ERROR in C:/Users/MyName/source/repos/MyProject/angular/src/app/merchandising/Tests/Test-main.component.ts (218,37): Property ‘updateTest’ does not exist on type ‘TestServiceProxy’.

Service.Swag.Config file:

{
  "swaggerGenerator": {
    "fromSwagger": {
      "url": "http://localhost:22742/swagger/v1/swagger.json",
      "output": null
    }
  },
  "codeGenerators": {
    "swaggerToTypeScriptClient": {
      "className": "{controller}ServiceProxy",
      "moduleName": "",
      "namespace": "",
      "typeScriptVersion": 1.8,
      "template": "Angular",
      "promiseType": "Promise",
      "dateTimeType": "MomentJS",
      "nullValue": "Undefined",
      "generateClientClasses": true,
      "generateClientInterfaces": false,
      "generateOptionalParameters": false,
      "wrapDtoExceptions": false,
      "useTransformOptionsMethod": false,
      "useTransformResultMethod": false,
      "generateDtoTypes": true,
      "operationGenerationMode": "MultipleClientsFromPathSegments",
      "markOptionalProperties": false,
      "generateCloneMethod": false,
      "typeStyle": "Class",
      "extensionCode": "service.extensions.ts",
      "generateDefaultValues": true,
      "excludedTypeNames": [],
      "handleReferences": false,
      "generateConstructorInterface": true,
      "importRequiredTypes": true,
      "baseUrlTokenName": "API_BASE_URL",
      "output": "../src/shared/service-proxies/service-proxies.ts"
    },
    "swaggerToCSharpClient": {
      "generateClientClasses": true,
      "generateClientInterfaces": false,
      "generateDtoTypes": true,
      "injectHttpClient": false,
      "disposeHttpClient": true,
      "generateExceptionClasses": true,
      "exceptionClass": "SwaggerException",
      "wrapDtoExceptions": true,
      "useHttpClientCreationMethod": false,
      "httpClientType": "System.Net.Http.HttpClient",
      "useHttpRequestMessageCreationMethod": false,
      "useBaseUrl": true,
      "generateSyncMethods": false,
      "clientClassAccessModifier": "public",
      "generateContractsOutput": false,
      "className": "{controller}Client",
      "namespace": "MyNamespace",
      "generateOptionalParameters": false,
      "requiredPropertiesMustBeDefined": true,
      "dateType": "System.DateTime",
      "dateTimeType": "System.DateTime",
      "timeType": "System.TimeSpan",
      "timeSpanType": "System.TimeSpan",
      "arrayType": "System.Collections.ObjectModel.ObservableCollection",
      "dictionaryType": "System.Collections.Generic.Dictionary",
      "classStyle": "Inpc",
      "operationGenerationMode": "MultipleClientsFromOperationId",
      "generateDefaultValues": true,
      "generateDataAnnotations": true,
      "excludedTypeNames": [],
      "wrapResponses": false,
      "generateResponseClasses": true,
      "responseClass": "SwaggerResponse",
      "handleReferences": false,
      "generateImmutableArrayProperties": false,
      "generateImmutableDictionaryProperties": false,
      "output": null
    },
    "swaggerToCSharpController": {
      "className": "{controller}",
      "namespace": "MyNamespace",
      "additionalNamespaceUsages": [
        "System.Web.Http"
      ],
      "generateOptionalParameters": false,
      "requiredPropertiesMustBeDefined": true,
      "dateType": "System.DateTime",
      "dateTimeType": "System.DateTime",
      "timeType": "System.TimeSpan",
      "timeSpanType": "System.TimeSpan",
      "arrayType": "System.Collections.Generic.IEnumerable",
      "dictionaryType": "System.Collections.Generic.Dictionary",
      "classStyle": "Inpc",
      "operationGenerationMode": "MultipleClientsFromOperationId",
      "generateDefaultValues": true,
      "generateDataAnnotations": true,
      "excludedTypeNames": [],
      "wrapResponses": false,
      "generateResponseClasses": true,
      "responseClass": "SwaggerResponse",
      "handleReferences": false,
      "generateImmutableArrayProperties": false,
      "generateImmutableDictionaryProperties": false,
      "output": null
    }
  }
}

I have “nswag”: “10.6.0” version

About this issue

  • Original URL
  • State: open
  • Created 6 years ago
  • Reactions: 2
  • Comments: 15 (4 by maintainers)

Most upvoted comments

The problem is that for the TS generator you use:

  "operationGenerationMode": "MultipleClientsFromPathSegments",

instead of

  "operationGenerationMode": "MultipleClientsFromOperationId",

MultipleClientsFromPathSegments uses just the last route segement as method name, and thus often provokes a name clash…