URL Routing in
ASP.Net 3.5(IIS7)
Routing?
Service Pack 1 for
the Microsoft .NET Framework 3.5 introduced a routing engine to the ASP.NET
runtime. The routing engine can decouple the URL in an incoming HTTP request
from the physical Web Form that responds to the request, allowing you to build
friendly URLs for your Web applications.
Suppose you have an
ASP.NET Web Form named CSharp.aspx, and this form is inside a folder named
‘Tutorial’. The classic approach to viewing a tutorial with this Web Form is to
build a URL pointing to the physical location of the form and encode some data
into the query string to tell the Web Form which author to display. The end of
such a URL might look like the following: /Tutorial/CSharp.aspx?AuthorID=5,
where the number 5 represents a primary key value in a database table full of
authors.
Configuring ASP.NET for Routing
To configure an
ASP.NET Web site or Web application for routing, you first need to add a
reference to the System.Web.Routing assembly. The SP1 installation for the .NET
Framework 3.5 will install this assembly into the global assembly cache, and
you can find the assembly inside the standard "Add Reference" dialog
box.
To run a Web site
with routing in IIS 7.0, you need two entries in web.config. The first entry is
the URL routing module configuration, which is found in the
section of . You also need an entry to handle requests
for UrlRouting.axd in the section of .
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing,
Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
</modules>
<handlers>
<add name="UrlRoutingHandler"
preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler,
System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</handlers>
</system.webServer>
Once you've
configured the URL routing module into the pipeline, it will wire itself to the
PostResolveRequestCache and the PostMapRequestHandler events.
Configuring Routes
Now to configure
route, the first thing is to register the route at application startup. To
register the routes at application startup write the following code in your
Global.asax file.
void Application_Start(object sender, EventArgs
e)
{
RegisterRoutes();
}
private void
RegisterRoutes()
{
RouteTable.Routes.Add("Tutorial",new("Tutorial/{subject}/{AuthorID}",
new RouteHandler(string.Format("~/CSharp.aspx"))));
}
Here
{subject}, {AuthorID} is name of Query Srting, through which we will get access
to the value passed through query string.
Now, we need a RouteHandler .
public class
RouteHandler : IRouteHandler
{
string
_virtualPath;
public
RouteHandler(string virtualPath)
{
_virtualPath = virtualPath;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
foreach
(var value in requestContext.RouteData.Values)
{
requestContext.HttpContext.Items[value.Key] = value.Value;
}
return
(Page)BuildManager.CreateInstanceFromVirtualPath(_virtualPath,
typeof(Page));
}
}
Now,
Routing is configured but what about the query string. How we can get access to
values passed through query string. To get the data passed through query string
we use context.Items[“ID”] instead of Request.QueryString[“ID”].
HttpContext context = HttpContext.Current;
String
id = context.Items["AuthorID"].ToString();