Честно говоря, мне не очень нравится идея System.Web.Routing, и я бы использовал ISAPI Rewrite, но люди пытаются, у всех свои задачи и причины, и иногда не получается. В общем, это пост из серии "Спрашивали – отвечаем".
- Добавляем Reference на сборку System.Web.Routing и ссылки на модули в web.config.
Web.config: <modules>
...
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
- Создаем класс global.asax, в котором инициализируем таблицу маршрутизации.
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
private void RegisterRoutes(RouteCollection routeCollection)
{
RouteTable.Routes.Add(new Route("{username}", new UsersRouteHandler()));
}
- Создаем класс, реализующий интерфейс IRouteHandler, в котором заполняем HttpContext нужными данными, которые будут переданы на целевую страницу.
public class UsersRouteHandler : IRouteHandler
{
IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
{
string userName = requestContext.RouteData.GetRequiredString("username");
HttpContext.Current.Items["username"] = userName;
return (Page)BuildManager.CreateInstanceFromVirtualPath(
String.Format("~/users.aspx", userName),
typeof(Page));
}
}
Скачать RoutingApp.zip (25Kb)