3

我正在为我的主要类别页面执行 UrlRewrite。转换:

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

www.mysite.com/Dogs

为此,我使用 Global.asax'sApplication_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. 还有其他解决方案吗?

提前致谢。

4

1 回答 1

2

缓存数据库查询没有任何问题。对于每个类别名称,您可以将 ID 存储在字典中,作为在特定时间段后过期的示例。在这种情况下,这将删除数据库调用。举个例子:

Dictionary<string, int> categoryIdLookup;

这可以存储在 HTTP 缓存中并进行检索,如果它为空(即从未添加过或已超出缓存)构建字典,查找正确的 Id,然后进行重写。

于 2009-02-01T12:17:50.013 回答