2015-01-31 3 views
0

У меня есть приложение ASP.NET (не mvc), и я хотел бы использовать сопоставление маршрутов для включения URL-адреса, который включает в себя суррогатный ключ (который конечные пользователи знакомы и используйте для ссылки на различные элементы), например www/entity/321654789, в вызове на страницу с помощью основного ключа, например: www/page.aspx? id = 103457Первичный ключ маршрутизации Asp.net для суррогата

Каков наилучший подход для этого? ? Мое исследование обнаружило только два метода: настраиваемый обработчик маршрута URL и информацию о новом параметре. Есть ли лучший метод? А если нет, то какой из двух известных методов лучше?

ответ

1

Маршрутизация - это двухсторонняя карта. Насколько мне известно, расширение RouteHandler можно использовать только для отображения входящих маршрутов. Но для генерирует URL (для связывания между вашими страницами), этот подход не будет работать.

Таким образом, лучшим вариантом является inherit RouteBase (или маршрут) для расширенной настройки маршрута. Вам просто нужно переопределить GetRouteData, чтобы сопоставить URL-адрес словаря значений маршрута и override GetVirtualPath, чтобы сопоставить словарь значений маршрутов с URL-адресом. По соглашению оба метода должны возвращать null, если они не соответствуют никакому значению (и структура маршрутизации затем попытается зарегистрировать следующий зарегистрированный маршрут).

Затем просто настройте свой собственный маршрут в файле RouteConfig.

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     // Add a custom Route instance. 
     routes.Add(new MyCustomRoute()); 

     // Add other routes... 
    } 
} 

Что касается вашего суррогатного ключа, существует несколько разных подходов, которые вы могли бы использовать.

  • Кэширование ключа-суррогатного ключа в словаре. Найдите ключ с карты и добавьте его в значения маршрута в GetRouteData и выполните обратный ключ ключа-суррогата для GetVirtualPath.
  • Кэширование ключевого суррогатного ключа в словаре. Найдите ключ с карты и выполните 301 переадресацию на страницу с помощью ключа в URL-адресе. В этом случае нет необходимости обратного поиска.
  • Используйте любой из указанных подходов, но используйте другую стратегию кэширования. Можно использовать file caching или distributed cache с System.Runtime.Caching.
Смежные вопросы