1,MyFirstHandler.cs
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Web;
using
System.Web.SessionState;
using
System.Xml;
/**/
/// <summary>
/// 参考文章http://www.cnblogs.com/stwyhm/archive/2006/08/09/471765.html
/// 感谢文野
/// 操作xml参考http://abeln.bokee.com/viewdiary.10442740.html
/// </summary>
public
class
MyFirstHandler : IHttpHandler, IRequiresSessionState
...
{
IHttpHandler 成员#region IHttpHandler 成员
//通过调用IsReusable,IHttpHandlerFactory可以查询处理程序以确定是否可以使用同一实例为多个请求提供服务
public bool IsReusable
...{

get ...{ return true; }
}
//方法将HttpContext实例用作参数,这使它能够访问Request和Response内部对象。在一个HttpHandler容器中如果需要访问Session,必须实现IRequiresSessionState接口,这只是一个标记接口,没有任何方法。
public void ProcessRequest(HttpContext context)
...{

Visit(context.Request.Url.ToString(), context.Server.MapPath("count.xml"));
string VisitAmount = ShowVisit(context.Request.Url.ToString(), context.Server.MapPath("count.xml"));
context.Response.Write("页面地址: " + context.Request.Url + "</br>被访问" + VisitAmount + "次");
}
#endregion


自定义方法#region 自定义方法
/**//// <summary>
/// 计数器加一
/// </summary>
/// <param name="Url">地址</param>
/// <param name="SavePath">文件路径</param>
public void Visit(string Url, string SavePath)
...{
bool Exist = false;
XmlDocument xmlDoc = new XmlDocument();//操作xml
xmlDoc.Load(SavePath);
XmlNodeList nodelist = xmlDoc.SelectSingleNode("PageInfos").ChildNodes;
foreach (XmlNode xn in nodelist)
...{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Url") == Url)
...{
Exist = true;
xe.SetAttribute("amount", Convert.ToString(int.Parse(xe.GetAttribute("amount")) + 1));//计数器加一
}
}
if (!Exist)
...{
//创建新的节点
XmlNode root = xmlDoc.SelectSingleNode("PageInfos");
XmlElement xe1 = xmlDoc.CreateElement("PageInfo");//创建一个
xe1.SetAttribute("Url", Url);//设置该节点Url
xe1.SetAttribute("amount", "1");//设置该节点amount
root.AppendChild(xe1);//添加到<PageInfos>节点中

}
xmlDoc.Save(SavePath);//更新xml文件
}
/**//// <summary>
/// 读取计数器
/// </summary>
/// <param name="Url">地址</param>
/// <param name="ReadPath">文件路径</param>
/// <returns></returns>
public string ShowVisit(string Url, string ReadPath)
...{
string VisitAmount = "0";
XmlDocument xmlDoc = new XmlDocument();//操作xml
xmlDoc.Load(ReadPath);
XmlNodeList nodelist = xmlDoc.SelectSingleNode("PageInfos").ChildNodes;
foreach (XmlNode xn in nodelist)
...{
XmlElement xe = (XmlElement)xn;
if (xe.GetAttribute("Url") == Url)
...{
VisitAmount = xe.GetAttribute("amount");
}
else
...{
continue;
}
}
return VisitAmount;
}
#endregion
}


2,xml文件count.xml
<?
xml version="1.0" encoding="utf-8"
?>
-
<
PageInfos
>
<
PageInfo
Url
="#"
amount
="0"
/>
<
PageInfo
Url
="http://localhost:1797/HttpHandlerDemo/Test1.aspx"
amount
="44"
/>
<
PageInfo
Url
="http://localhost:1797/HttpHandlerDemo/Test2.aspx"
amount
="35"
/>
<
PageInfo
Url
="http://localhost:1797/HttpHandlerDemo/Default.aspx"
amount
="4"
/>
<
PageInfo
Url
="http://localhost:1797/HttpHandlerDemo/Test3.aspx"
amount
="6"
/>
</
PageInfos
>
3在webcongfig中添加
<
httpHandlers
>
<
add
verb
="*"
path
="*"
type
="MyFirstHandler"
/>
</
httpHandlers
>
源代码下载
本文介绍了一个简单的ASP.NET HTTP Handler示例,展示了如何利用XML文件记录网页访问次数,并通过HTTP请求更新这些统计数据。该示例包括了MyFirstHandler类的具体实现细节及配置步骤。

5641

被折叠的 条评论
为什么被折叠?



