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}$)}
|
All Code Factory
- Part 11- Insert data into database
- Part 12- Server side and clientside validation
- Part 13- Insert data into multiple tables
- Part 14- Insert data into database using JQuery
- Part 15- How to create Bootstrap Popup
- Part 16- Delete operation in Asp.net MVC
- Part 17- What is Partial View in Asp.net MVC
- Part 18- How to call Partial View using JQuery
- Part 19- Difference between Html.Partial() and Html.RenderPartial()
- Part 20- AddEdit Record using Partial View
- Part 21- Layout View in Asp.net MVC
- Part 22- Style.Render and Script.Render
- Part 23 - RenderBody, RenderSection and RenderPage.
- Part 24- Divide Page into several component using Bootstrap
- Part 25- Refresh Entity framework after any modification in database table
- Part 26- Set foreign key relationnship in database tables
- Part 27- Create Rgistration Page
- Part 28- Create Login Page
- Part 29- Client Side Validation using JQuery
- Part 30- How to return multiple Model to a View (Interview)
- Part 31- How to create Dynamic Menu using Partial View
- Part 32- Preview Image Before Uploading
- Part 33- Upload and Display Image using JQuery
- Part 34-Upload Image to SQL Server and Display
- Part 35- Download Image from URL and Upload to SQL Server
- Part 36- Cascading DropdownList
- Part 37- Implement Search Functionality
- Part 38- Attribute Routing in MVC
- Part 39- How to display multiple checkbox checked data
- Part 40- How to send multiple checkbox checked value to Server
- Part 41- How to create responsive sortable Image Gallery
- Part 42 - How to implement JQuery Autocomplete Textbox
- Part 43 - How to send Emails in Asp.net MVC
- Part 44 - Integrate JQuery DataTables plugin
- Part 45 - Display record from database using JQuery Datatable
- Part 46- Add Edit Record using JQuery DataTable
- Part 47 - JQuery DataTables Server -side Processing
- Part 48 - JQuery server side processing -Search functionality
- Part 49 - Pagination using Skip and Take method
- Part 50 - Refresh DataTable After Performing Any Action
- Part 51 - Send OTP ( One Time Password ) to any mobile device
- Part 52 - How to use AutoMapper in Asp.net MVC
- Part 53 - How to use AutoMapper ForMember Method
- Part 54 - Repository Pattern - 1 - Adding Business Layer
- Part 55 - Repository Pattern - 2 - Adding Domain Layer
- Part 56 - Repository Pattern - 3 - Dependency Injection
- Part 57- Repository Pattern- 4 - Adding Data Access Layer
- Part 58 - Repository Pattern - 5 - Setting Up Generic Repository
- Part 59 - Display Record using repository pattern
- Part 60 - Add Edit Record using Repository Pattern
No comments:
Post a Comment