Routing Allows us to build friendly URL's by 
decoupling the URL of the HTTP Request from the physical path of the web form 
that serves the Request. Previous versions of ASP.NET allows us to build 
freindly URLs but the Routing engine simplifies building friendly URL's. The 
routing engine is included in the System.Web.Routing assembly.
Suppose we have a WebForm named SoftwareProducts which is in the folder named 
Products .The classic approach to viewing the SoftwareProducts is to point the 
URL to the physical location of the SoftwareProducts WebForm. The URL will look 
something like /Products/SoftwareProducts.aspx?id=1.
Routing allows us to use the following URL for the above request 
/Products/Software/1 ,which is more easier for the user to understand.
In the following example we define routes for SoftwareProducts and 
ElectronicProducts WebForms.The RoutingPage WebForm will handle the common 
request. Following is the folder structure for the application
![Routing1.gif]()
We write code that match URL patterns and the code that handles it ,in the 
application startup method Application_StartUp of global.asax .We use the new 
MapPageRoute method for this purpose. Also we need to import the new 
System.Web.Routing namespace which includes the RouteTable class.
protected
void Application_Start(object 
sender, EventArgs e)
        {
            RouteTable.Routes.MapPageRoute(
             "Products",                   
    //Route Name
             " Products/Software/{ProductId}",//URL 
Pattern To Match
             "~/RoutingPage.aspx");      
    //Path To Redirect To The Page
        }
This route defines a URL pattern to match and the 
WebForm that will actually handle the request for that URL. All requests of the 
form Pages/Software/ProductId are handled by RoutingPage.aspx. ProductId here is 
the parameter in the URL. The value of ProductId is accessible to 
RoutingPage.aspx via the Page.RouteData[] indexer.
In the code of the RoutingPage WebForm we read the value of ProductId and then 
redirect to the appropriate page by using the following code.
   
protected void 
Page_Load(object sender,
EventArgs e)
    {
        //The following code extracts the value of 
ProductId  parameter
        string strProductId = 
Page.RouteData.Values["ProductId"].ToString();
        if (strProductId ==
"1")
        {
            Response.Redirect("..\\SoftwareProducts\\SoftwareProducts.aspx");
        }
        else if 
(strProductId == "2")
        {
            Response.Redirect("..\\ElectronicProducts\\ElectronicProducts.aspx");
        }
    }
Now if we add Products/Software/1 to the startup URL like :
http://localhost:1497/Products/Software/1 we will see the SofwareProducts page 
shown below.
![Routing2.gif]()
We can also access the route parameters in the markup as
<asp:Label
ID="Label1"
runat="server"
Text="<%$RouteValue: 
ProductId %>"
/>
The RouteValue expression makes it easier for us to use route data in markup, 
and avoids working with the more complex Page.RouteData in markup.