I have a project where I want to use route attributes with a custom type. The following code where I have the custom type as a query parameter works fine and the help page displays the custom type.
// GET api/values?5,6
[Route("api/values")]
public string Get(IntegerListParameter ids)
{
return "value";
}
WebApi.HelpPage gives the following documentation Help:Page
If I change the code to use route attributes, the result is that I get an empty help page.
// GET api/values/5,6
[Route("api/values/{ids}")]
public string Get(IntegerListParameter ids)
{
return "value";
}
When I inspect the code I observe in HelpController.cs that ApiExplorer.ApiDescriptions returns an empty collection of ApiDescriptions
public ActionResult Index()
{
ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
Collection<ApiDescription> apiDescriptions = Configuration.Services.GetApiExplorer().ApiDescriptions;
return View(apiDescriptions);
}
Is there any way to get ApiExplorer to recognize my custom class IntegerListParameter as attribute routing?
Not exactly sure what data structure
IntegerListParameter
list is but if you need to send a comma delimited list of integers in the query(e.g.~api/products?ids=1,2,3,4
) you can use filter attributes. An example implementation of this can be found here: Convert custom action filter for Web API use?You need to:
IntegerListParameter
typeIValueProviderParameterBinding
and implementValueProviderFactories
IntegerListParameter
and overrideCanConvertFrom
method fortypeof(string)
parameterAfter these actions, route with custom type IntegerListParameter must be recognized in ApiExplorer.
See my example for type
ObjectId
: