2009-02-01 6 views
3

Я выполняю UrlRewrite для своих основных категорий. Преобразование:UrlRewriting для Global.asax и кэширования вывода SQL

www.mysite.com/Category.aspx?id=2 

в

www.mysite.com/Dogs 

Для того, чтобы сделать это, я использую Global.asax «s Application_BeginRequest где я выполнить следующий код (псевдокод):

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    if (IsCategoryUrl()) 
    { 
     string CategoryName = ParseCategoryNameFromUrl(Request.Url); 
     string CategoryId = GetCategoryIdByNameFromDB(CategoryName); 
     Context.RewritePath("/Category.aspx?id=" + CategoryId); 
    } 
} 

Мои вопросы :

  1. Это правильный способ выполнения Url Rewriting? (Это первый раз, когда я это делаю).
  2. Этот код вызывает чтение из базы данных почти на каждый запрос, есть ли способ кэшировать его? Единственный метод, который я нашел для SQL Caching, требует директивы <%@ Page %>, которая невозможна на global.asax. Любое другое решение?

Заранее спасибо.

ответ

2

Нет ничего плохого в кэшировании запросов к базе данных. Для каждого названия категории вы можете сохранить идентификатор в словаре в качестве примера, который истекает через определенный промежуток времени. В этом случае удаляются вызовы БД. В качестве примера:

Dictionary<string, int> categoryIdLookup; 

Это может храниться в кэше HTTP и извлекаться, если она равна нулю (т.е. он никогда не был добавлен или выпал из кэша) построить словарь, выполните поиск правильного Id, а затем сделайте переписывание.

+0

спасибо, ваш ответ был очень полезен! –