I have a search Api I’m working on that needs to return search results in a block of Html (using styles the client has defined on their end). I would also like to return results in Json, for future Api stuff we’ll eventually be using. Currently, the routes look like this:
/api/1/search/json?param1=blah¶m2=blah&etc
/api/1/search/html?param1=blah¶m2=blah&etc
For reference, the pattern here is /{area}/1/{controller}/{action}.
I like the look of some Api’s I’ve seen that return results in different formats depending on the ‘extension’ they have in the url, a la:
/api/1/search.json?param1=blah¶m2=blah&etc
However, I haven’t figured out how to configure Asp.Net’s Mvc routing to support this style. The general routing in ApiAreaRegistration.cs is:
context.MapRoute(
"Api_default",
"Api/1/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional });
I have tried the following, defined above the general one, which doesn’t work:
//search api
context.MapRoute(
"searchJson",
"api/1/{controller}.{action}",
new { controller = "SearchController" });
How would I configure routing to enable the .format-style urls?
is probably what you want. Then you could just return the different results based on the argument passed in.
Within the context of an Api Area, the SearchController would look like this: