Part 38 - Attribute routing in asp.net MVC
In this video you will find the basic concept of an Attribute routing. We have included several example of attribute routing which will help you to understand from the depth.
- MVC-5 has included a new type of routing, which is known as attribute routing.
- Attribute routing uses attributes to define routes.
- Attribute routing gives you more control over the URI' s in your web application.
Example -
[Route("Student/{Id}")]
public int GetStudent(int Id)
{
return Id;
}
How to enable attribute routing?
- Open your RouteConfig.cs which is present under App_Start folder. Then you have to add MapMvcAttributeRoutes()” method into this . Please refer below screenshot.
Can we use attribute routing with convention-based routing ?
- Yes, we can use both of them.
#Various example of attribute routing
1. Optional parameter and default value:
We can set parameter as optional and can set default value for this. To set optional parameter we used "?" character in [Route]. Example: [Route("Student/Name/{Name?}")].
we can also set the default value for this. Example: [Route("Student/Name/{Name=Ashish}")].
Now below method can be accessed by below url pattern
1. Student/Name/YourName"
2. Student/Name"
//Optional URI parameter
[Route("Student/Name/{Name?}")]
public string GetStudent(string Name)
{
return "Student with Name =" + Name;
}
//Default URI parameter value
[Route("Student/Name/{Name=Ashish}")]
public string GetStudent(string Name)
{
return "Student with Name =" + Name;
}
2. Route Prefixes:
- You can use route prefix at method level as well as at controller level.
a). Route prefix at method level
In [Route("Student")] and [Route("Student/{Id}")], the Student text is acting like route prefix
[Route("Student")]
public string GetStudent()
{
return "All";
}
[Route("Student/{Id}")]
public string GetStudent(int Id)
{
return "Student with Id=" + Id;
}
Route prefix can be added at controller level. Here we have added [RoutePrefix("Home")]
on the top of TestController class. Now we can access the Index method with below url pattern.
Home/Index
namespace MVCTutorial.Controllers
{
[RoutePrefix("Home")]
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
We can set the default route at controller level. Example [Route("{action=Index}")]
namespace MVCTutorial.Controllers
{
[RoutePrefix("Home")]
[Route("{action=Index}")]
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
Route constraints let you restrict how the parameters in the route template are matched. The general syntax is {parameter:constraint}. For example, in the below code, there are three "GetStudent()" methods. Now see below cases in which we have shown that which url pattern will be used to call "GetStudent()" method.
case (a). Test/Student/11 - It will call first GetStudent() method as we passed an integer value as an optional parameter i.e. "11" . Also "11" does not lie between 3 and 10. So, there is no chance for calling third GetStudent() method. So, this route will work : [Route("Student/{Id:int}")]
case (b). Test/Student/Ashish - It will call the second method as we have passed a string value as an optional parameter. i.e "Ashish". In this case [Route("Student/{Name}")] will be working.
case (c). Test/Student/4 - It will call the third GetStudent() method as we have passed an integer as an optional parameter and its also lies between 3 to 10. So, this route will be working in this case : [Route("Student/{Id:int:min(3):max(10)}")]
namespace MVCTutorial.Controllers
{
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
[Route("Student/{Id:int}")] //case (a)
public string GetStudent(int Id)
{
return "Student with Id=" + Id;
}
[Route("Student/{Name}")] // case (b)
public string GetStudent(string Name)
{
return "Student with Name=" + Name;
}
[Route("Student/{Id:int:min(3):max(10)}")] // case (c)
public string GetStudent(int Id)
{
return "Student with Id=" + Id;
}
[Route("Student/Message/{Message:maxlength(5)}")]
public string GetMessage(string Message)
{
return "Student message=" + Message;
}
}
}
Below constraint chart will help you to apply constraint against different URL
SN | Constraint | Description | Example |
ü1 | alpha | Matches uppercase or lowercase Latin alphabet characters (a-z, A-Z) | {x:alpha} |
ü2 | bool | Matches a Boolean value. | {x:bool} |
ü3 | datetime | Matches a DateTime value. | {x:datetime} |
ü4 | decimal | Matches a decimal value. | {x:decimal} |
ü5 | double | Matches a 64-bit floating-point value. | {x:double} |
ü6 | float | Matches a 32-bit floating-point value. | {x:float} |
ü7 | guid | Matches a GUID value. | {x:guid} |
ü8 | int | Matches a 32-bit integer value. | {x:int} |
ü9 | length | Matches a string with the specified length or within a specified range of lengths. | {x:length(6)} {x:length(1,20)} |
ü10 | long | Matches a 64-bit integer value. | {x:long} |
ü11 | max | Matches an integer with a maximum value. | {x:max(10)} |
ü12 | maxlength | Matches a string with a maximum length. | {x:maxlength(10)} |
ü13 | min | Matches an integer with a minimum value. | {x:min(10)} |
ü14 | minlength | Matches a string with a minimum length. | {x:minlength(10)} |
ü15 | range | Matches an integer within a range of values. | {x:range(10,50)} |
ü16 | regex | Matches a regular expression. | {x:regex(^\d{3}-\d{3}-\d{4}$)} |
0 Response to "Part 38 - Attribute routing in asp.net MVC "
Post a Comment