In this article we will get explained how to map Web Api2 with Area. We will step into:
- Routing with WEB Api2 & Area
- Attribute Routing
- Parameters with Api2 Methods
Let’s get started: Routing with WEB Api2 & Area
First of all, we need to create a new MVC and Api Project with Visual Studio 2015.
Fig: 1.0

Fig: 1.1

Next we need to create an area in our project like below.
Fig:1.2

Now we will configure and add some controllers to our area. We also need to changes route in our Area Registration.
The main route(RouteConfig & WebApiConfig) will remain as it is.
Default Area Route: Below is the code sample of our Area registration.
public class AdminPanelAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "AdminPanel";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"AdminPanel_default",
"AdminPanel/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Let’s create a Api2 empty Controller and create a method to invoke. Below is a image showing how to add an api2 Controller.
Fig:1.3

Method in api2 Controller.Let’s see what happened after build & run our application.
// GET: AdminPanel/api/Dashboard/
[HttpGet]
public string Get()
{
string result = string.Empty;
try
{
result = "We are in Dashboard From API2";
}
catch (Exception e)
{
e.ToString();
}
return result;
}
Output: This is showing that unable to locate the url content.
GET: AdminPanel/api/Dashboard/

Routing with WEB Api2 & Area: Let’s modify our existing Area route.
public class AdminPanelAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "AdminPanel";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
//****************=======Default Api Route=========*******************
context.Routes.MapHttpRoute(
name: "AdminPanelApiAction",
routeTemplate: "AdminPanel/api/{controller}/{action}"
);
context.Routes.MapHttpRoute(
name: "AdminPanelApi",
routeTemplate: "AdminPanel/api/{controller}"
);
//****************=======Default Route=========*******************
context.MapRoute(
"AdminPanel_dashboard",
"AdminPanel/{controller}/{action}/{id}",
new { Controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
);
context.MapRoute(
"AdminPanel_default",
"AdminPanel/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
Let’s put a break point in our apiController get method after that again build & run the application, put the previous URL and press enter.
Fig:1.4

This time it hits the debug point like below image.
Output:

Next we will focus how to use Attribute Routing.
Register Attribute Routing:
routes.MapMvcAttributeRoutes();
Finally Main route config
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
Let’s add another method with attribute [Route(“AdminPanel/api/Dashboard/Get/{id:int}”)]
//GET: AdminPanel/api/Dashboard/Get/1
[Route("AdminPanel/api/Dashboard/Get/{id:int}")]
[HttpGet]
public string Get(int? id)
{
string result = string.Empty;
try
{
result = "We are in Member - " + id + " From API2";
}
catch (Exception e)
{
e.ToString();
}
return result;
}
Let’s put a break point in our apiController get method after that again build & run the application, put the previous URL and press enter.
Fig:1.5

Output:

Source Code: I’ve uploaded the full source code to download/clone , Hope this will help 🙂
says:
i tried but Not working with Web Api please check the error message following :
An error has occurred.
Multiple types were found that match the controller named ‘test’. This can happen if the route that services this request (‘JIB/api/{controller}/{action}’) found multiple controllers defined with the same name but differing namespaces, which is not supported. The request for ‘test’ has found the following matching controllers: WebApplication2.Areas.JIB.Controllers.TestController WebApplication2.Areas.JCB.Controllers.TestController
System.InvalidOperationException
at System.Web.Http.Dispatcher.DefaultHttpControllerSelector.SelectController(HttpRequestMessage request) at System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext()
Eluander Lopes says:
Funcionou perfeitamente! Obrigado pela ajuda!
Mr S says:
Hi SHASHANGKA,
Thanks for sharing, this works perfect!
agen qq online terpercaya says:
I am really happy to glad at this blog posts which carries tons of useful facts,
thanks for providing these kinds of data.