Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Not supported by Swagger 2.0: Multiple operations with path

I have integrated swagger in WebApi 2 application. It works fine when application has single controller. When I added second controller in the application. I got following error :

An error has occurred.","ExceptionMessage":"Not supported by Swagger 2.0: Multiple operations with path 'api/Credential' and method 'GET'. See the config setting - \"ResolveConflictingActions\" for a potential workaround","ExceptionType":"System.NotSupportedException","StackTrace":" at Swashbuckle.Swagger.SwaggerGeneratorOptions.DefaultConflictingActionsResolver(IEnumerable1 apiDescriptions)\r\n at Swashbuckle.Swagger.SwaggerGenerator.CreatePathItem(IEnumerable1 apiDescriptions, SchemaRegistry schemaRegistry)\r\n at Swashbuckle.Swagger.SwaggerGenerator.<>c__DisplayClass7.b__4(IGrouping2 group)\r\n at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable1 source, Func2 keySelector, Func2 elementSelector, IEqualityComparer1 comparer)\r\n at Swashbuckle.Swagger.SwaggerGenerator.GetSwagger(String rootUrl, String apiVersion)\r\n at Swashbuckle.Application.SwaggerDocsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Net.Http.HttpMessageInvoker.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpRoutingDispatcher.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Net.Http.DelegatingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)\r\n at System.Web.Http.Cors.CorsMessageHandler.<SendAsync>d__0.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.HttpServer.d__0.MoveNext()"} http://localhost:50950/swagger/docs/v1

In the second controller I have added following two methods.

 string Get(string username, string password);   string Get(string credential); 

If I comment one of the method. Then it works fine.

Any Idea how to fix it?

like image 875
user2266837 Avatar asked Sep 20 '16 19:09

user2266837


People also ask

How do I give a path to swagger?

You can use curly braces {} to mark parts of an URL as path parameters: /users/{id} /organizations/{orgId}/members/{memberId}

What is swagger file path?

In Swagger terms, paths are endpoints (resources) that your API exposes, such as /users or /reports/summary , and operations are the HTTP methods used to manipulate these paths, such as GET, POST or DELETE.


1 Answers

In the file AppStart/SwaggerConfig.cs

First one, you must import Linq

using System.Linq; 

And add in the same file, this line

c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); 

just inside of:

GlobalConfiguration.Configuration                  .EnableSwagger(c =>                     { ... 

One consideration: In your controllers, you must use the Http methods :

[HttpGet] [Route("something")] public List<model> something(){....}  [HttpGet] [Route("something2")] public List<model2> something2(){....}  [HttpPost] [Route("mypost1")] public List<model> mypost1(){....}  [HttpPost] [Route("mypost2")] public List<model2> mypost2(){....} 
like image 180
Benjamin RD Avatar answered Sep 18 '22 23:09

Benjamin RD