public class UrlRewriter : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
string url = context.Request.RawUrl;//获取用户请求的URL地址信息
string path = context.Server.MapPath(@"~/UrlRewriter.xml");
List<XmlMode> list = GetXml(path);
foreach (XmlMode item in list)
{
//Regex Reg = new Regex(item.LookFor, RegexOptions.IgnoreCase);//建立正则表达式
//Match m = Reg.Match(url, url.LastIndexOf("/"));//用正则表达式进行URL字符串
string s = item.LookFor;
s = s.Remove(0, 1);
if (url==s)//匹配成功
{
string RealPath = item.SendTo;//重定向真ra实的地址信息
context.Server.Execute(RealPath);
context.Response.End();
}
}
}
public bool IsReusable
{
get { return false; }
}
#region 获取xml伪静态设置的数据 List<XmlMode> GetXml(string path)
/// <summary>
/// 获取xml伪静态设置的数据
/// </summary>
/// <param name="path">xml地址</param>
/// <returns>返回相应集合</returns>
List<XmlMode> GetXml(string path)
{
List<XmlMode> list = new List<XmlMode>();
XmlMode xmlModel = null;
XmlDocument doc = new XmlDocument();
doc.Load(path); //加载Xml文件
XmlElement rootElem = doc.DocumentElement; //获取根节点
XmlNodeList personNodes = rootElem.GetElementsByTagName("RewriterRule"); //获取RewriterRule子节点集合
foreach (XmlNode node in personNodes)
{
string strLookFor = node.SelectSingleNode("LookFor").InnerText;
string strSendTo = node.SelectSingleNode("SendTo").InnerText;
string strSymbol = node.SelectSingleNode("Symbol").InnerText;
xmlModel = new XmlMode()
{
LookFor = strLookFor,
SendTo = strSendTo,
Symbol=strSymbol
};
list.Add(xmlModel);
}
return list;
}
#endregion
}
class XmlMode
{
public string LookFor { get; set; }
public string SendTo { get; set; }
public string Symbol { get; set; }
{
public void ProcessRequest(HttpContext context)
{
string url = context.Request.RawUrl;//获取用户请求的URL地址信息
string path = context.Server.MapPath(@"~/UrlRewriter.xml");
List<XmlMode> list = GetXml(path);
foreach (XmlMode item in list)
{
//Regex Reg = new Regex(item.LookFor, RegexOptions.IgnoreCase);//建立正则表达式
//Match m = Reg.Match(url, url.LastIndexOf("/"));//用正则表达式进行URL字符串
string s = item.LookFor;
s = s.Remove(0, 1);
if (url==s)//匹配成功
{
string RealPath = item.SendTo;//重定向真ra实的地址信息
context.Server.Execute(RealPath);
context.Response.End();
}
}
}
public bool IsReusable
{
get { return false; }
}
#region 获取xml伪静态设置的数据 List<XmlMode> GetXml(string path)
/// <summary>
/// 获取xml伪静态设置的数据
/// </summary>
/// <param name="path">xml地址</param>
/// <returns>返回相应集合</returns>
List<XmlMode> GetXml(string path)
{
List<XmlMode> list = new List<XmlMode>();
XmlMode xmlModel = null;
XmlDocument doc = new XmlDocument();
doc.Load(path); //加载Xml文件
XmlElement rootElem = doc.DocumentElement; //获取根节点
XmlNodeList personNodes = rootElem.GetElementsByTagName("RewriterRule"); //获取RewriterRule子节点集合
foreach (XmlNode node in personNodes)
{
string strLookFor = node.SelectSingleNode("LookFor").InnerText;
string strSendTo = node.SelectSingleNode("SendTo").InnerText;
string strSymbol = node.SelectSingleNode("Symbol").InnerText;
xmlModel = new XmlMode()
{
LookFor = strLookFor,
SendTo = strSendTo,
Symbol=strSymbol
};
list.Add(xmlModel);
}
return list;
}
#endregion
}
class XmlMode
{
public string LookFor { get; set; }
public string SendTo { get; set; }
public string Symbol { get; set; }
}
<?xml version="1.0" encoding="utf-8" ?>
<RewriterConfig>
<RewriterRule>
<LookFor>~/index.html</LookFor>
<SendTo>~/index.aspx</SendTo>
<Symbol>-</Symbol>
</RewriterRule>
<RewriterRule>
<LookFor>~/about.html</LookFor>
<SendTo>~/about.aspx</SendTo>
<Symbol>-</Symbol>
</RewriterRule>
</RewriterConfig>
<httpHandlers>
<!--使用自定义UrlRewriter类-->
<add verb="*" path="*.html" type="Web.UrlRewriter"/>
</httpHandlers>