Possible Duplicate:
How do I register a controller that has been created in an AREA
I have the question - is it possible to do the next?
I have three Areas:
_Default
SiteOne
SiteTwo
Inside each area i have a ApiController with the same name, but in different namespaces of course:
MvcAppliaction.Areas._Default.Controllers.ValuesController
MvcAppliaction.Areas.SiteOne.Controllers.ValuesController
MvcAppliaction.Areas.SiteTwo.Controllers.ValuesController
I also have a value of current (which i would like to use) Area in configuration.
I would like to map user to controller in the proper Area (which i can find in the configuration) if he enters in the browser:
/api/values
For example, if current Area in config file is SiteOne then this request should be mapped to MvcAppliaction.Areas.SiteOne.Controllers.ValuesController controller, but if i change current Area in config file to SiteTwo of _Default it should be mapped to correct controller.
PS. With MVC controller it's easy, you just have to set your route:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "MvcApplication.Web.Areas." + SiteName + ".Controllers") }
);
Try adding the following using statement and modifying the route registration in your AreaRegistration.cs file.
using System.Web.Http;
...
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.MapHttpRoute(
name: this.AreaName,
routeTemplate: this.AreaName + "/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}