asp.net2.0 URL重写及urlMappings问题2
由于一旦进行了url重写,原先的webform中的action会发生改变,容易造成:请求的资源不存在问题
具体怎么样?各位dx看看就清楚了!!!
所有才有了这个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);
}
//下面的这一段可以用来修改之间的内容;
//regex oendfile = new regex("", 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("",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通过自定义配置节做也可以的
(www.iocblog.net 文章来源)
//这个规则写的不好,如第一个就可以用一个正则表达式来做。但是一时不知道怎么写好,好像要用到什么反捕获组的概念,正在思考这个东东!!
(www.iocblog.net 文章来源)
Tag: URL重写
文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。