Click here to Skip to main content
Licence CPOL
First Posted 7 Jul 2009
Views 40,372
Downloads 2,136
Bookmarked 59 times

URL rewriting using ASP.NET routing

By | 7 Jul 2009 | Article
MVC style search engine friendly URLs using ASP.NET routing, which comes as an enhancement in SP1 of ASP.NET 3.5.

Introduction

Sometimes we need to have search engine friendly URLs for our application. In ASP.NET (before ASP.NET MVC/3.5 SP1), we had to use some third party tools like URL rewriter, which work fine but require wild card mapping in IIS and have issues with IIS7.

ASP.NET MVC has introduced the System.Web.Routing assembly for rewriting URLs; now, it is included in ASP.NET 3.5 SP1. Using the routing assembly, you can have search engine friendly URLs like http://mysite.com/add_new_user.

Now we can use the System.Web.Routing assembly in our ASP.NET website to create such URLs. (Please see the download file from above.)

Using the code

You can find the complete source code from the download provided above (url_routing.zip). Unzip the file and open using Visual Studio 2008 (open the website wizard), and you will need to browse to the folder "url_rout" (that should contain the web.config file).

First of all, you have to add a reference to System.Web.Routing in your application, or you can add the following line in the web.config (under the assemblies section). You must have ASP.NET 3.5 SP1 installed.

<add assembly="System.Web.Routing, Version=3.5.0.0, 
     Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

Now, we need to create different routes in global.asax. In the first route "Add_New_User", we don't have any parameters; but in the second route "User/{name}", we have a parameter called name.

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    RegisterRoutes();
}
private static void RegisterRoutes()
{
    System.Web.Routing.RouteTable.Routes.Add(
           "Add_New_User", 
           new System.Web.Routing.Route("Add_New_User",
               new RouteHandler("~/RegisterUser.aspx")));
    
    System.Web.Routing.RouteTable.Routes.Add(
           "user", 
           new System.Web.Routing.Route("User/{name}",
               new UserRouteHandler("~/DisplayUser.aspx")));
}

UserRouteHandler and RouteHandler are classes that implement IRouteHandler, as shown below:

public class UserRouteHandler : IRouteHandler
{
    public UserRouteHandler(string virtualPath)
    {
        _virtualPath = virtualPath;
    }

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        var display = BuildManager.CreateInstanceFromVirtualPath(
                      _virtualPath, typeof(Page)) as IUserDisplay;
        display.UniqueName = 
          requestContext.RouteData.Values["name"] as string;
        return display;
    }

     string _virtualPath;
}

You will notice that IUserDisplay is an interface which implements IHttpHandler:

public interface IUserDisplay : IHttpHandler
{
    string UniqueName { get; set; }
}

IUserDisplay has to be implemented by the page to be rendered (DisplayUser.aspx, in this case) as shown below, so that the unique identifier (UniqueName, in the case) or parameter will be found in the page, which can be used to show the appropriate data (like the query string).

public partial class DisplayUser : Page, IUserDisplay
{
    public string UniqueName { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (UniqueName != null && !UniqueName.Equals(""))
        {
        //do some coding
    }
    }
}

Points of interest

I have found that all samples and tutorials on this topic are for either ASP.NET MVC applications or web projects, and nothing if I want to create a normal ASP.NET website (however, there are not much differences between them). Here are some useful links for routing:

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

bajpai.anurag

Software Developer (Senior)
Neev Information Technologies Pvt Ltd
India India

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Questionhow to get parameter value on destination page. Pinmembermaneeshkatiyar09@gmail.com17:29 3 Apr '12  
SuggestionMore discription Pinmemberatulkath2810:22 2 Apr '12  
QuestionYour solution don't work on IIS 6 with Wild Card Entry PinmemberPushkarr19:40 3 Feb '12  
QuestionURL ROUTING NOT WORKING PinmemberMember 82384961:46 23 Dec '11  
BugProblem with image and css paths PinmemberKike Vesga19:56 4 Oct '11  
GeneralProblem With UrlRoting PinmemberShrivastva2:21 18 Feb '11  
QuestionIIS settings for URLREWRITING Pinmemberneil@euclid1:49 3 Nov '10  
AnswerRe: IIS settings for URLREWRITING Pinmemberneil@euclid1:22 9 Nov '10  
QuestionProblem with master page and user control Pinmemberjinal.mehta20:32 31 May '10  
AnswerRe: Problem with master page and user control Pinmemberbajpai.anurag4:24 1 Jun '10  
QuestionHow to combine UrlRoutingModule with AjaxControlToolkit Pinmemberusuphan5:23 14 Dec '09  
GeneralBest article on ASP.NET Routing Pinmembernomi19843:13 27 Oct '09  
GeneralA big Thanks PinmemberBjorn van der Neut10:40 21 Aug '09  
QuestionInteresting Pinmemberstixoffire5:17 8 Jul '09  
AnswerRe: Interesting Pinmemberrippo21:07 13 Jul '09  
AnswerRe: Interesting Pinmemberbajpai.anurag22:04 13 Jul '09  
GeneralRe: Interesting PinmemberA. Riazi18:00 15 Jul '09  
GeneralRe: Interesting Pinmemberbajpai.anurag3:21 16 Jul '09  
GeneralRe: Interesting Pinmembersuis6:30 10 Sep '10  
GeneralRe: Interesting Pinmembermullapudipraveen19:43 3 Jan '11  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120517.1 | Last Updated 7 Jul 2009
Article Copyright 2009 by bajpai.anurag
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid