UrlRewriting на Global.asax и кеширование вывода SQL - PullRequest
3 голосов
/ 01 февраля 2009

Я выполняю UrlRewrite для страниц моей основной категории. Преобразование:

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

до

www.mysite.com/Dogs

Для этого я использую Global.asax 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? (Я делаю это впервые).
  2. Этот код вызывает чтение из БД практически при КАЖДОМ запросе, есть ли способ его кешировать? Единственный метод, который я нашел для кэширования SQL, требовал директивы <%@ Page %>, что невозможно в global.asax. Любое другое решение?

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

1 Ответ

2 голосов
/ 01 февраля 2009

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

Dictionary<string, int> categoryIdLookup;

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...