Web
Analytics
asp.net core 2.0 attribute based routing | Angular | ASP.NET Tutorials

For Consultation : +91 9887575540

Stay Connected :

asp.net core 2.0 attribute routing

In asp.net core routing is a way to define custom routes to call various controllers and their action. In asp.net , there are two ways to define routes.

  1. Conventional based routing. (If you are not aware of conventional routing then read my previous article.
  2. Attribute-Based Routing

Attribute-based routing is capable to handle complex routes. Routes definitions are provided on controller and action level , we will not define routes in startup.cs just like conventional based routing.

[Route("Home/Index")]

public IActionResult Index() { }

Here you can see that Index is decorated with Route attribute, It means that Index action may be called using http://localhost:3333/Home/Index

NoteAllways add  app.UseMvcWithDefaultRoute(); into configure method of StartUp.cs



Example of Attribute based routing in asp.net core 2.2

//  Route("MyHome") implies that this action may be called using MyHome
//[Route("MyHome")]
// [Route("")] imlies that no need to define controller name in URL
    // [Route("")] For Empty Controller Name

  [Route("[controller]")] // controller is just placeholder to get current place holder
    public class HomeController : Controller
    {
        [Route("Index")]
        public IActionResult Index()
        {
            return Content("Index Action of Home Controller");
        }
        [Route("Contact")]
        public IActionResult ContactUs()
        {
            return Content("ContactUs Action of Home Controller");
        }
}
    }

Multiple Routes for an action:

As single action may have multiple routes, so these attribute based routing help us to write multiple routes URL to access the same action.

Example: 

// Add Multiple Routes
        [Route("feedback1")] // Access Using https://localhost:44347/Home/feedback1
        [Route("")] //https://localhost:44347/Home
        [Route("myfeedback")] // https://localhost:44347/Home/myfeedback
        [Route("my/myfeedback")] // https://localhost:44347/Home/my/myfeedback
        [Route("[action]")] // // https://localhost:44347/Home/feedback
        public IActionResult Feedback()
        {
            return Content("FeedBack Action of Home Controller");
        }

Attribute routing route constraints

Just like conventional based routing, we are also capable to write route constraint, route constraints are a kind of URL pattern, for example if we want that ID must be numeric, then It must be number.

// Route Constraints
        [Route("calculate/{x:int}/{y:int}")]  // https://localhost:44347/Home/Calculate/85/30
        public IActionResult Add(int x, int y)
        {
            return Content("Addition is = " + (x + y));
        }

Here you can see that x and y two route parameter only accept integer values otherwise it will throw 404 error.



Attribute routing in areas:

Attribute routing can be applied on areas of asp.net core . To understand this concept, first of all, we have to create an area in the working project.

namespace Core_Basic.Areas.Admin.Controllers
{
    [Area("Admin")]
    [Route("")]
    public class DashBoardController : Controller
    {

        [Route("[area]/Login")] // https://localhost:44347/Admin/Login
        
        public IActionResult Index()
        {
            return Content("Index Action of Admin Area DashBoard Controller");
        }
    }
}

In areas attribute routing we must decorate controller of the area using Area attribute.After decorating controller decoration we also decorate actions with area token([Route(“[area]/Login”)]) .