Practical ASP.NET

Routing Your ASP.NET Application

New for ASP.NET developers with .NET 3.5 SP1 is routing, an easy way to simplify site maintenance -- and give meaning to your users' lives.

One of the features added in Service Pack 1 for .NET 3.5 is routing (which first appeared in the MVC version of ASP.NET). Routing allows you to disconnect the physical structure of your site from the URLs that users invoke to access your pages in your site.

At least one benefit of this technology is obvious: You can rearrange your site's structure without invalidating your users' bookmarks. After moving your pages around (or renaming them) you can modify your routing information to point to the new page names. This "routing layer" acts like the data layer in an n-tier application that disconnects business objects from the details of the database structure.

There are other benefits to routing. URLs can be relatively meaningless to users. These URLs, for instance, would be opaque to most users:

http://www.mysite.com/MyApp/InventoryA.aspx?
inventoryid=A1345&action=D
http://www.mysite.com/MyApp/InventoryB.aspx?
category=15&action=L

URLs that would be more meaningful to users might look like these:

http://www.mysite.com/MyApp/Inventory/Details/A1345
http://www.mysite.com/MyApp/Inventory/List/Condiments

To my mind, there's at least one major benefit to "meaningful" URLs: better error 404 messages. If all of your page names are meaningless then, when a user enters an invalid URL, the best you can do is tell them that the page doesn't exist. With a meaningful URL, you can send a page that describes the format of the URL and specifies that the second-to-last parameter must be "Details" or "List" and that the last parameter must be a valid item id or category id. Meaningful URLs also support "URL butchery" where users modify the URL to get the results they want. Users can rewrite their URL and press the Enter key to get the desired results.

In addition to supporting users more effectively, meaningful URLs also can result in improved rankings on search engines. Generally speaking, URLs that contain key search terms will score higher on search engines than meaningless virtual paths.

There's only one piece of bad news: While converting an existing site to using routing is relatively easy, if you use querystrings to pass data between pages you'll need to rewrite some of your existing code. I'll discuss that problem in my next column but in this column, you'll see how to define a route that supports meaningful URLs.

Implementing Routing
The first steps in implementing routing are to add a reference to System.Web.Routing to your Web site and reference the UrlRoutingModule in your web.config file inside the httpModules element, as shown here.

The next step is to add a Global.asax file to your application (cleverly called "Global Application Class" in the Add New Item dialog). You use the Application Start event in the Global.asax file to define the routes in your application by creating Route objects.

When you create a Route object, you specify the template for the URLs your users will provide and the class that will handle converting your URLs into requests for real pages (I'll look at that class in my next column). Once you've created the Route object, you add it to the Routes collection of ASP.NET's RouteTable.

This example creates a Route object, specifying a URL that consists of the word "Inventory," followed by some action, followed by some item id. The code also creates an InventoryRouter object (the class that I'll write to handle URL conversions) and passes that to the Route object.

As you can see, the "replaceable" parts of the URL template are enclosed in braces (these parts are called "URL parameters"). Two parameters must always be separated by some delimiter. Using my previous example as a starting point, I could also have created a template with a hyphen between the action and the item id.

I couldn't just bump the action up to the item id, so this example would be invalid.

Now that I've defined a route, the next step is to decode it. In my next column, I'll return to routing to show how to convert a meaningful URL into an actual path to a WebForm.

About the Author

Peter Vogel is a system architect and principal in PH&V Information Services. PH&V provides full-stack consulting from UX design through object modeling to database design. Peter tweets about his VSM columns with the hashtag #vogelarticles. His blog posts on user experience design can be found at http://blog.learningtree.com/tag/ui/.

comments powered by Disqus

Featured

  • Hands On: New VS Code Insiders Build Creates Web Page from Image in Seconds

    New Vision support with GitHub Copilot in the latest Visual Studio Code Insiders build takes a user-supplied mockup image and creates a web page from it in seconds, handling all the HTML and CSS.

  • Naive Bayes Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the naive Bayes regression technique, where the goal is to predict a single numeric value. Compared to other machine learning regression techniques, naive Bayes regression is usually less accurate, but is simple, easy to implement and customize, works on both large and small datasets, is highly interpretable, and doesn't require tuning any hyperparameters.

  • VS Code Copilot Previews New GPT-4o AI Code Completion Model

    The 4o upgrade includes additional training on more than 275,000 high-quality public repositories in over 30 popular programming languages, said Microsoft-owned GitHub, which created the original "AI pair programmer" years ago.

  • Microsoft's Rust Embrace Continues with Azure SDK Beta

    "Rust's strong type system and ownership model help prevent common programming errors such as null pointer dereferencing and buffer overflows, leading to more secure and stable code."

  • Xcode IDE from Microsoft Archrival Apple Gets Copilot AI

    Just after expanding the reach of its Copilot AI coding assistant to the open-source Eclipse IDE, Microsoft showcased how it's going even further, providing details about a preview version for the Xcode IDE from archrival Apple.

Subscribe on YouTube

Upcoming Training Events