亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

asp.net 2.0 中的URL重寫以及urlMappings問題

2024-07-10 13:14:39
字體:
來源:轉載
供稿:網友
在asp.net2.0中的urlMappings倒是非常好用,可惜暫不支持正則表達式,不過,好在如果用IHttpModule的話

不管什么樣的請求都會先經過IHttpModule這樣就為URL重寫提供了一個好機會:

下面是我寫的一個IHttpModule:

using System;
using System.Web;

public class ReWriteModule:IHttpModule
{
public ReWriteModule()
{
}
public override string ToString()
{
return this.GetType().ToString();
}


void IHttpModule.Dispose()
{

}
private static System.Xml.XmlDocument ruleDoc = null;
private static System.Xml.XmlDocument GetRuleConfig(System.Web.HttpContext app)
{
if (ruleDoc == null)
{
ruleDoc = new System.Xml.XmlDocument();
ruleDoc.Load(app.Server.MapPath("~/rule.xml"));
}
return ruleDoc;
}
public static string GetUrl(System.Web.HttpContext cxt,string path)
{

System.Xml.XmlDocument doc = GetRuleConfig(cxt);
System.Xml.XmlNodeList lst= doc.GetElementsByTagName("RewriterRule");
string pat="";
foreach (System.Xml.XmlNode nd in lst)
{
System.Xml.XmlNodeList sub = nd.ChildNodes[0].ChildNodes;
foreach(System.Xml.XmlNode chk in sub)
{
pat = "^" + chk.InnerText+"$";
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pat, System.Text.RegularExpressions.RegexOptions.Compiled | System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if(reg.IsMatch(path))
{
return reg.Replace(path, nd.ChildNodes[1].InnerText);
}
}
}
return null;

}
void IHttpModule.Init(HttpApplication context)
{
context.BeginRequest += delegate(object sender, EventArgs e)
{


System.Web.HttpContext cxt = context.Context;

if (cxt.Request.ContentType != "image/pjpeg")
{
string type = cxt.Request.ContentType.ToLower();
string path = cxt.Request.Path;
string apppath = cxt.Request.ApplicationPath;
path = path.Remove(0, apppath.Length);
path = "~" + path;

string newUrl = GetUrl(cxt, path.TrimEnd().TrimStart());
if (newUrl != null)
{
cxt.Response.Filter = new ResponseFilter(cxt.Response.Filter,cxt.Request.Path);
cxt.Response.Write("請求的路徑:" + path);
cxt.Response.Write("<BR>");
cxt.Response.Write("轉向的目的URL:" + newUrl);
cxt.Response.Write("<BR>");
cxt.RewritePath(newUrl);



}//如果要求處理所有的請求時用到
//else
//{
// cxt.Response.Write(cxt.Request.Path + "<BR>");
// cxt.Response.Write("你請求的資源不存在或無權訪問!");
// cxt.Response.Flush();
// cxt.Response.End();
//}
}

};
}
}

由于一旦進行了URL重寫,原先的WEBFORM中的Action會發生改變,容易造成:請求的資源不存在問題

具體怎么樣?各位DX看看就清楚了?。。?br />
所有才有了這個ResponseFilter了,實現如下,

public class ResponseFilter:System.IO.Stream
{
public ResponseFilter(System.IO.Stream sink,string _str)
{
_sink = sink;
//
// TODO: 在此處添加構造函數邏輯
//
this.str = _str;
}
private string str = "";
private System.IO.Stream _sink;
private long _position;
private System.Text.Encoding end=System.Text.Encoding.GetEncoding("GB18030");
private System.Text.StringBuilder oOutput = new System.Text.StringBuilder();
// The following members of Stream must be overriden.
public override bool CanRead
{
get { return true; }
}

public override bool CanSeek
{
get { return true; }
}

public override bool CanWrite
{
get { return true; }
}

public override long Length
{
get { return 0; }
}

public override long Position
{
get { return _position; }
set { _position = value; }
}

public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return _sink.Seek(offset, direction);
}

public override void SetLength(long length)
{
_sink.SetLength(length);
}

public override void Close()
{
_sink.Close();
}

public override void Flush()
{
_sink.Flush();
}

public override int Read(byte[] buffer, int offset, int count)
{
return _sink.Read(buffer, offset, count);
}

// The Write method actually does the filtering.
public override void Write(byte[] buffer, int offset, int count)
{
string szBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
string ap="action=/"";
int pos=-1;
if ((pos=szBuffer.IndexOf(ap) )!= -1)
{
int epos = szBuffer.IndexOf("/"", pos + ap.Length+1);
if (epos != -1)
{
szBuffer= szBuffer.Remove(pos + ap.Length, epos - pos - ap.Length);
}

szBuffer = szBuffer.Insert(pos + ap.Length, this.str);

byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(szBuffer);
_sink.Write(data, 0, data.Length);

}
else
{
oOutput.Append(szBuffer);
}

//下面的這一段可以用來修改<Head></head>之間的內容;
//Regex oEndFile = new Regex("</head>", RegexOptions.IgnoreCase|RegexOptions.Compiled);
//if (oEndFile.IsMatch(szBuffer))
//{
// //Append the last buffer of data
// //附加上緩沖區中的最后一部分數據
// oOutput.Append(szBuffer);
// //Get back the complete response for the client
// //傳回完整的客戶端返回數據
// string szCompleteBuffer = oOutput.ToString().ToLower();
// int ipos = szCompleteBuffer.IndexOf("<title>");
// int epos = szCompleteBuffer.IndexOf("</title>",ipos+7);
// string sp = szCompleteBuffer.Substring(ipos+7, epos - ipos );
// szCompleteBuffer = szCompleteBuffer.Remove(ipos+7,sp.Length-7);
// szCompleteBuffer = szCompleteBuffer.Insert(ipos + 7, "dhz");
// // szCompleteBuffer = szCompleteBuffer.Replace(sp, "dhz");
// //No match, so write out original data
// //沒有匹配,因此寫入源代碼
// byte[] data = System.Text.UTF8Encoding.UTF8.GetBytes(szCompleteBuffer);
// _sink.Write(data, 0, data.Length);
//}
//else
//{
// oOutput.Append(szBuffer);
//}
}
}

//////而重候規則呢則是用xml文件配置如下;

當然在web.config通過自定義配置節做也可以的

<?xml version="1.0" encoding="utf-8" ?>
<Rules>
<RewriterRule>
<LookFors>
<LookFor>~/(/d{4})/(/d{2})/.html</LookFor>
<LookFor>~/(/d{4})/(/d{2})/</LookFor>
<LookFor>~/(/d{4})/(/d{2})</LookFor>
<LookFor>~/(/d{4})/(/d{2})/index.html</LookFor>
</LookFors>
<SendTo>~/Pro.aspx?year=$1&month=$2</SendTo>
</RewriterRule>
<RewriterRule>
<LookFors>
<LookFor>~/pc</LookFor>
</LookFors>
<SendTo>~/Test2.aspx</SendTo>
</RewriterRule>
</Rules>
//這個規則寫的不好,如第一個就可以用一個正則表達式來做。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲理论片在线观看| 久久久久久免费精品| 日韩精品视频中文在线观看| 国产成人在线视频| 精品一区二区三区三区| 亚洲精品乱码久久久久久金桔影视| 成人欧美一区二区三区黑人| 欧美做爰性生交视频| 亚洲人成自拍网站| 97香蕉超级碰碰久久免费的优势| 97色在线视频| 久久久国产精品亚洲一区| 国产视频福利一区| 91视频免费网站| www.99久久热国产日韩欧美.com| 91精品国产网站| 日韩精品视频在线免费观看| 91嫩草在线视频| 青青a在线精品免费观看| 国产精品第一第二| 久久精品视频在线播放| 国产精品久久久久久中文字| 欧美激情精品久久久久久变态| 国产成人一区二区三区电影| 久久福利网址导航| 久久精品久久精品亚洲人| 日韩av在线一区二区| 久热精品视频在线观看一区| 原创国产精品91| 亚洲一区二区黄| 国产精品精品视频| 欧美日韩在线看| 亚洲天堂2020| 午夜精品久久久久久99热软件| 欧美日韩在线视频首页| 国产精品色午夜在线观看| 中文综合在线观看| 日本电影亚洲天堂| 亚洲a级在线播放观看| 亚洲影院色在线观看免费| 亚洲国产高潮在线观看| 日韩精品免费在线视频观看| 全色精品综合影院| 欧美成人亚洲成人日韩成人| 欧美美最猛性xxxxxx| 亚洲美女免费精品视频在线观看| 国产亚洲精品高潮| 九九热精品在线| 国产精品最新在线观看| 精品久久香蕉国产线看观看gif| 久久综合88中文色鬼| 国产91精品黑色丝袜高跟鞋| 亚洲欧美国产制服动漫| 国产精品美女无圣光视频| 国产精品久久国产精品99gif| 裸体女人亚洲精品一区| 91沈先生作品| 欧美成人激情视频| 日韩视频一区在线| 91性高湖久久久久久久久_久久99| 91理论片午午论夜理片久久| 在线观看国产欧美| 欧美色另类天堂2015| 色播久久人人爽人人爽人人片视av| www.久久撸.com| 日韩av大片免费看| 高清亚洲成在人网站天堂| 日韩av在线免费看| 狠狠久久亚洲欧美专区| 日韩亚洲在线观看| 国产91精品久久久| 亚洲国产成人久久综合| 91福利视频在线观看| 少妇高潮久久久久久潘金莲| 精品中文字幕在线2019| 国产精品高潮呻吟久久av无限| 国产精品视频午夜| 日韩天堂在线视频| 国产精品久久久久久久久久东京| 日韩视频欧美视频| 97久久超碰福利国产精品…| 亚洲一区二区中文字幕| 亚洲国产精品成人va在线观看| 久久久噜噜噜久久久| 一区国产精品视频| 欧美大码xxxx| 亚洲第一av在线| 久久精品小视频| 性色av香蕉一区二区| 国产成人中文字幕| 久久成人人人人精品欧| 久久精品久久久久久国产 免费| 久热精品视频在线免费观看| 中国日韩欧美久久久久久久久| 日韩网站免费观看高清| 久久99精品久久久久久噜噜| 国产亚洲美女精品久久久| 国产午夜精品一区理论片飘花| 91av国产在线| 久久香蕉国产线看观看网| 日韩在线精品视频| 欧美成人免费视频| 国产精品6699| 91国在线精品国内播放| 日韩欧美一区二区三区久久| 欧美性开放视频| 九九九热精品免费视频观看网站| 青青a在线精品免费观看| 日韩在线视频网站| 精品国产福利视频| 欧美成人精品三级在线观看| 97超碰蝌蚪网人人做人人爽| 在线日韩中文字幕| 亚洲美女在线看| 九九热最新视频//这里只有精品| 欧美激情精品久久久久久| 成人激情视频在线| 欧美成人午夜剧场免费观看| 色综合伊人色综合网| 精品中文字幕在线2019| 精品国产一区二区三区四区在线观看| 国产性色av一区二区| 国产精品久久电影观看| 成人黄色免费在线观看| 欧美噜噜久久久xxx| 久久人91精品久久久久久不卡| 亚洲人成亚洲人成在线观看| 性日韩欧美在线视频| 欧美另类精品xxxx孕妇| 精品亚洲一区二区| 国产精品视频区1| 亚洲电影成人av99爱色| 亚洲人在线观看| 国产在线观看精品一区二区三区| 日韩成人激情视频| 亚洲色图50p| 国产成人精品一区二区| 91色精品视频在线| 在线观看精品国产视频| 两个人的视频www国产精品| 91产国在线观看动作片喷水| 欧美俄罗斯乱妇| 久久久久久九九九| 久久久精品在线观看| 国产精品第一视频| 国产精品福利观看| 欧美成人午夜视频| 不卡av日日日| 国产激情999| 国产人妖伪娘一区91| 日韩电影大片中文字幕| 久久亚洲精品网站| 在线观看久久av| 久久久久久com| 亚洲美女精品久久| 色诱女教师一区二区三区| 国产伦精品免费视频| 岛国av一区二区三区| 亚洲美女精品久久| 在线丨暗呦小u女国产精品| 日韩综合视频在线观看| 在线亚洲午夜片av大片| 欧美激情视频网站| 久久精品国产亚洲一区二区|