Search code examples
asp.net.netasp.net-mvcwcf-web-api

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


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


Solution

  • 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.