ASP.NET 4.0 веб-формы маршрутизации
У меня есть существующий сайт, который я хотел бы преобразовать для использования маршрутизации, и после прочтения поста Скотта Гатри здесь я создал рабочий образец, который работает в большинстве случаев. Однако, поскольку не все страницы на существующем сайте соответствуют определенному шаблону, мне нужно проверить базу данных, чтобы определить, какой маршрут (целевую страницу.aspx) использовать.
Например, большинство страниц выглядят так:
http://www.mysite.com/people/person.html
Это нормально - я легко могу перенаправить их на страницу view_person.aspx из-за каталога people.
Но некоторые страницы похожи на это:
http://www.mysite.com/category_page.html http://www.mysite.com/product_page.html
Это требует проверки базы данных, чтобы увидеть, следует ли направлять на страницу view_category.aspx или на страницу view_product.aspx. И вот где я застрял. Я создаю IRouteHandler, который проверяет базу данных и возвращает маршрут? Или есть лучший способ? Единственный код, который я нашел, - это ответ на этот вопрос.
Заранее спасибо.
3 ответа
Для любого, кто застрял в той же ситуации, я в итоге адаптировал код из этого ответа для проверки базы данных и возврата соответствующей страницы ASPX.
Если вы не возражаете против этого, самое чистое решение:
http://www.mysite.com/pages/category_page.html
В ASP.NET MVC эта ситуация будет обрабатываться немного по-другому, указав контроллер по умолчанию и метод действия на корневом маршруте.
Ваш обработчик маршрута не проверяет базу данных. Он отправляет все запросы скрипту обработчика .aspx. Это тот сценарий, который проверяет базу данных.
Мой маршрут регистрации выглядит так...
private static void RegisterRoutes()
{
Route currRoute = new Route("{resource}.axd/{*pathInfo}",
new StopRoutingHandler());
RouteTable.Routes.Add( "IgnoreHandlers", currRoute);
currRoute = new Route("{urlname}",
new EPCRouteHandler("~/Default.aspx"));
currRoute.Defaults = new RouteValueDictionary {{"urlname", "index.html"}};
RouteTable.Routes.Add( "Default", currRoute);
}
Пользовательский обработчик, который не требуется в ASP.Net 4.0, просто передает параметр urlname отвечающему сценарию как переменную URL.
Теперь, как часто отвечающий скрипт проверяет базу данных, зависит от того, как часто данные в базе данных изменяются. Вы можете легко кэшировать пути и сделать кеш недействительным, например, если предполагается, что данные изменились.