Can I have both a Controller and an ApiController for the same thing?

Gary McGill picture Gary McGill · Jul 19, 2012 · Viewed 8.6k times · Source

I've just started to use the VS 2012 RC, and I'm creating an ASP.NET MVC 4 web application in which I plan to provide both an HTML-based user interface and a WebApi-based programming interface.

For my HTML website, I have a controller and view for each of my models (MVC!), and the routing works "by convention" so that, for example, the URL /client hooks up to my ClientController. My ClientController derives from Controller.

For my API, I will create new controllers that derive from ApiController. I naturally want my API URLs to be similar to my HTML URLs, so I'd like the client info to be available at /api/client. However, with the by-convention routing, that would suggest that I need an ApiController named ClientController. And I already have a ClientController class.

How do I deal with this? Do I need custom routing? Do I put the API classes in different namespace so that I can give them the same name?

Update: this question seems to suggest that a different namespace for my API controllers is all I need: Mix web api controllers and site controllers

Answer

Gary McGill picture Gary McGill · Aug 2, 2012

All it requires is for the controller classes to be in a different namespace, and all is well.

Using MVC areas would also work (as suggested in gordonml's comment), but this effectively puts the controllers in different namespaces, so it's a more formal way of achieving the same result.