Part 38 - Attribute routing in asp.net MVC - Technotips

Breaking

BANNER 728X90

Saturday, 15 July 2017

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.

What is attribute routing ?
- 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;
}

b). Route prefix at controller level 
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();
}


}
}

3.  Default Route :
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();
}


}
}

5.  Route Constraints
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


No comments:

Post a Comment