I've always been fond of making my URL's clean and simple. With that being said, URL variables are always useful. But in the case of this site, I decided to clean up the URL's so it's very easy for people to find content. To do this, I added the code:
void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
string path = context.Request.Path;
if (path.Contains(".aspx"))
{
if (path.ToLower().Contains("/article/"))
{
string id
= path.Remove(0, path.LastIndexOf("/") + 1).Replace(".aspx", "");
try
{
int.Parse(id);
context.RewritePath("~/article/article.aspx?ArticleID=" + id);
}
catch
{
// don't do anything because it's a postback
}
}
}
}
It's fairly simple to follow. First, I checked to see if it was an ASPX page, so I can weed out all the HTTP Handlers being used. Then I checked if it's a page I want to manipulate. Essentially, what Context.RewritePath does is take the incoming URL and modify it before it hits the page handler. So when I go to /Article/3.aspx, the code see's that it contain's both '.apsx' and 'article', and then because I know the format, I am stripping off everything else and keeping the article ID. Once that is done I pass the ID to the page that actually get's called behind the scenes. It's a quick and dirty way to make URL's human-friendly.