Ever since I started looking into URL rewriting, people have had problems with getting it to work without extensions. Some solutions require setting IIS up differently or creating additional HTTP Handlers. The solution I propose isn't a "true" extensionless rewrite, but a bit of a hack that will give the impression of extensionless URLs.
Basically, you need to start with a URL rewrite engine. You can easily build your own using Application events and built-in Http methods in C#, but I used Microsoft's URL rewriter MSDN example.
URL Rewriting in ASP.NET
Get that example setup and working for your site first. You may also want to create a Form.browser file in the App_Browsers folder to fix the postback problem that occurs. You can read more about that here on Jesse Ezell's blog.
OK, so you're up and running with the URL rewrite engine, but your links are still all pointing to something.aspx. The problem is that without the .aspx extension, the aspnet_isapi.dll filter won't know that it should be handling the request.
The fix basically uses the default document feature in IIS to convince the ASP.Net ISAPI filter to handle the request. Any folder that has a default.aspx page in it can be referenced simply by the folder url and IIS will pick up on the default document (default.aspx) and process the request.
So, the idea is that you are creating folders on the fly as links are created and putting a blank default.aspx file in the new folder. The URL for that new folder doesn't have to include the default.aspx page at all. Instead of a link like http://www.dojotech.com/Blogs/Sean/default.aspx, you simply point to http://www.dojotech.com/Blogs/Sean and IIS handles it the same way.
The bogus default.aspx doesn't event have to be a real page, it can be completely blank. I use a little function as new links are created called MakeSlugFile. This does the job of creating the new folder and creating a default.aspx placeholder.
public static string MakeSlugFile(object slug)
{
string sskug = slug.ToString();
string slugPath = HttpContext.Current.Server.MapPath(sskug);
if (!Directory.Exists(slugPath))
{
Directory.CreateDirectory(slugPath);
File.Create(slugPath + "\\Default.aspx");
}
else
{
if (!File.Exists(slugPath + "\\Default.aspx"))
File.Create(slugPath + "\\Default.aspx");
}
return sskug;
}
Like I said, it's a hack, but it works fairly easily and you don't need to muck about with IIS.