ASP 缓存处理及URL 重写

时间:2023-03-09 22:58:17
ASP 缓存处理及URL 重写

1 缓存

1.1.1

<%--通过设置VaryByParam ="none" 来实现 整页缓存 --%> 
<%@ OutputCache Duration="" VaryByParam ="none" %>

1.1.2

<%--带参数缓存,只要包含在VaryByParam 中的任何一个参数改变都会使页面缓存失效,如果当前参数不包含在VaryByParam中,则改变也无效--%> 
<%@ OutputCache Duration="" VaryByParam="id;name;age" %>

1.1.3

<%--根据控件id来缓存整个页面--%>

<%@ OutputCache Duration="" VaryByControl="a" %>

1.2 【Wed.config】 配置 缓存

<%@ OutputCache CacheProfile="MyCacheTest"%> 【Wed.config】 下的配置 
<system.web>
  <compilation debug="true" targetFramework="4.0" />
<!--统一页面缓存管理配置节点-->
  <caching>
    <outputCacheSettings>
      <outputCacheProfiles>
      <!--duration:缓存事时间 name:缓存名称,在页面使用的时候 CacheProfile要指定name中设置的值-->
        <add name="MyCacheTest" duration="" varyByParam="none" />
       </outputCacheProfiles>
    </outputCacheSettings>
  </caching>

1.3 文件缓存 在asp中的后台代码:

    protected void Page_Load(object sender, EventArgs e)
{
string atxtContent; if (Cache["datetimenow"] != null)
{
//lbdatetime.Text = Cache["datetimenow"].ToString();
lbdatetime.Text = Cache["datetimenow"].ToString();
}
else
{
DateTime now = DateTime.Now;
#region 设置缓存的绝对过期时间
Cache["datetimenow"] = now.ToString();
//设置缓存的绝对过期时间 中不设置相对过期时间 写法一:TimeSpan.Zero
Cache.Insert("datetimenow", now, null, DateTime.Now.AddSeconds(), TimeSpan.Zero);
//设置缓存的绝对过期时间 中不设置相对过期时间 写法二:System.Web.Caching.Cache.NoSlidingExpiration
Cache.Insert("datetimenow", now, null, DateTime.Now.AddSeconds(), System.Web.Caching.Cache.NoSlidingExpiration);
#endregion #region 设置缓存的相对过期时间
//设置缓存的相对过期时间
Cache.Insert("datetimenow", now, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(, , , )
, System.Web.Caching.CacheItemPriority.High, myCacheItemRemovedCallback);
#endregion #region 文件缓存依赖,首先:绝对过期时间和相对过期时间要设置不过期
//文件缓存依赖,首先:绝对过期时间和相对过期时间要设置不过期
// 定义该缓存要依赖的文件,注意传入文件的绝对路径 atxtContent = System.IO.File.ReadAllText(Server.MapPath("b.txt"));
CacheDependency cdFile = new CacheDependency(Server.MapPath("a.txt")); Cache.Insert("datetimenow"
, atxtContent
, cdFile
, System.Web.Caching.Cache.NoAbsoluteExpiration
, System.Web.Caching.Cache.NoSlidingExpiration
, System.Web.Caching.CacheItemPriority.High, myCacheItemRemovedCallback
);
#endregion lbdatetime.Text = atxtContent;
} } #region 当缓存被移除的时候,系统会自动调用该回调函数 +myCacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason)
/// <summary>
///当缓存被移除的时候,系统会自动调用该回调函数
/// </summary>
/// <param name="key">当前失效的缓存key</param>
/// <param name="value">当前失效时缓存key对应的缓存内容</param>
/// <param name="reason">缓存失效的原因</param>
void myCacheItemRemovedCallback(string key, object value, CacheItemRemovedReason reason)
{
System.IO.File.WriteAllText(@"E:\传智播客\7期班\2013-9-15 asp.net高级 缓存,工厂,单例\源代码\缓存\WebApplication1\log.txt"
, "key=" + key + " value=" + value + " reason=" + reason);
}
#endregion

1.4 数据库缓存 直接在【Web.config】中配置

 <configuration>
<connectionStrings>
<add name="CachedbConnectString" connectionString="data source=.;initial catalog=PhoneBook;user id=sa;password=123" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<!--统一页面缓存管理配置节点-->
<caching> <sqlCacheDependency enabled="true" pollTime="">
<databases>
<add name="PhoneBook" connectionStringName="CachedbConnectString"/>
</databases>
</sqlCacheDependency> </caching> </system.web> </configuration>

URL重写

方法一:

新建一个 【Global.asax】文件 在它的  Application_BeginRequest 方法里写 获取URL,并通过 正则表达式 将 URL 重写

 //得到当前url的请求路径
string currUrl = HttpContext.Current.Request.RawUrl; //top/1
string newUrl = ""; //定义正则表达式
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("index/(.*)/(.*)");
if (reg.IsMatch(currUrl))
{
//将匹配的url替换成"index.aspx?id=$1&name=$2" 类型的字符串
newUrl = reg.Replace(currUrl, "index.aspx?id=$1&name=$2"); //重写是靠RewritePath(path) path只能传相对路径index.aspx?id=1&name=2 而不能传http://loclhost/index.aspx?id=1&name=2
HttpContext.Current.RewritePath(newUrl);

方法二:在Internet 中选中网站后

在URL 重写中 --添加规则 --用户友好URL

ASP 缓存处理及URL 重写

ASP 缓存处理及URL 重写            ASP 缓存处理及URL 重写

在这里就是将你要修改的URL写到URL 输入框里,下面的下拉框选择你要的URL格式

ASP 缓存处理及URL 重写

  如果有漏的,希望有大神补充一下!!