Quantcast
Channel: ASPNETWebStack Issue Tracker Rss Feed
Viewing all articles
Browse latest Browse all 7215

Created Issue: ApiExplorer incorrectly assumes conflicts when a controller's action could be reached by multiple routes. [869]

$
0
0
I have a ValuesController and StudentsController in my application and following routes:

```
config.Routes.MapHttpRoute(
name: "Api2",
routeTemplate: "api/Values/{id}",
defaults: new { id = RouteParameter.Optional, controller = "Values" }
);

config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
```

I see that ApiExplorer is not generating descriptions for values controller. It generates fine for StudentsController.

I debugged through this and noticed the problem is occurring in the following method of ApiExplorer.cs
```
// remove ApiDescription that will lead to ambiguous action matching.
private static Collection<ApiDescription> RemoveInvalidApiDescriptions(Collection<ApiDescription> apiDescriptions)
{
HashSet<string> duplicateApiDescriptionIds = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
HashSet<string> visitedApiDescriptionIds = new HashSet<string>(StringComparer.OrdinalIgnoreCase);

foreach (ApiDescription description in apiDescriptions)
{
string apiDescriptionId = description.ID;
if (visitedApiDescriptionIds.Contains(apiDescriptionId))
{
duplicateApiDescriptionIds.Add(apiDescriptionId);
}
else
{
visitedApiDescriptionIds.Add(apiDescriptionId);
}
}

Collection<ApiDescription> filteredApiDescriptions = new Collection<ApiDescription>();
foreach (ApiDescription apiDescription in apiDescriptions)
{
string apiDescriptionId = apiDescription.ID;
if (!duplicateApiDescriptionIds.Contains(apiDescriptionId))
{
filteredApiDescriptions.Add(apiDescription);
}
}

return filteredApiDescriptions;
}
```

Viewing all articles
Browse latest Browse all 7215

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>