Welcome to blog.techweb.com.cn Blogs. This is your first post. Edit or delete it, then start blogging!
Asp.net(c#)实现多线程断点续传
System.IO.Stream iStream = null;
// Buffer to read 10K bytes in chunk:
byte[] buffer = new Byte[10240];
// Length of the file:
int length;
// Total bytes to read:
long dataToRead;
// Identify the file to download including its path.
string filepath = @”E:\software\SQL Server 2000 Personal Edition.ISO”;
// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);
try
{
// Open the file.
iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open,
System.IO.FileAccess.Read,System.IO.FileShare.Read);
Response.Clear();
// Total bytes to read:
dataToRead = iStream.Length;
long p = 0;
if(Request.Headers["Range"]!=null)
{
Response.StatusCode = 206;
p = long.Parse( Request.Headers["Range"].Replace(”bytes=”,”").Replace(”-”,”"));
}
if(p != 0)
{
Response.AddHeader(”Content-Range”,”bytes ” + p.ToString() + “-” + ((long)(dataToRead - 1)).ToString() + “/” + dataToRead.ToString());
}
Response.AddHeader(”Content-Length”,((long)(dataToRead-p)).ToString());
Response.ContentType = “application/octet-stream”;
Response.AddHeader(”Content-Disposition”, “attachment; filename=” + System.Web.HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(filename)));
iStream.Position = p;
dataToRead = dataToRead - p;
// Read the bytes.
while (dataToRead > 0)
{
// Verify that the client is connected.
if (Response.IsClientConnected)
{
// Read the data in buffer.
length = iStream.Read(buffer, 0, 10240);
// Write the data to the current output stream.
Response.OutputStream.Write(buffer, 0, length);
// Flush the data to the HTML output.
Response.Flush();
buffer= new Byte[10240];
dataToRead = dataToRead - length;
}
else
{
//prevent infinite loop if user disconnects
dataToRead = -1;
}
}
}
catch (Exception ex)
{
// Trap the error, if any.
Response.Write(”Error : ” + ex.Message);
}
finally
{
if (iStream != null)
{
//Close the file.
iStream.Close();
}
Response.End();
}
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
动态控制Page页的Head信息
在以前的ASP程序里我们经常用使用Response.Write动态输出网页Header信息,但在ASP.NET里这个所谓代码与UI分离的指导思想不再希望我们这样做了(当然如果您愿意还可以,这毕竟只是建议而已),以前见过别人用<title ranut=”server” id=”titleControl”>Default Title</title>设置标题的,但本人认为不是很好,因为这会产生多余的id=”titleControl” 个人感觉使用Literal控件控制比较好,因为它不会产生一个多余的字符:),也有人使用js的动态设置标题,但这你让搜索引擎怎么办?
动态控制Page页的Head信息其实很简单
先看演示: http://www.lvjiyong.com/demo/aspnet/seth…
演示做的很简单,大家可以下了源码好好看,注解里面都有了
主要使用了Literal与PlaceHolder
方法放置在BasePage里,下次让WebForm继承BasePage类就可以调用了
使用Literal设置Title信息
使用PlaceHolder载入样式表与脚本
Literal允许我们直接设置文本信息,使用时我们先让程序查找是否有指定的Literal控件,如果有则设置Text
/**//// <summary>
/// 设置Head信息
/// </summary>
/// <param name=”_name”>控件</param>
/// <param name=”_control”>文本</param>
private void setHeader(string _control,string _text)
{
Literal obj = this.FindControl(_control) as Literal;
if(obj != null)
{
obj.Text = _text;
}
}
比如我们在Head区设置了<asp:Literal id=”PageTitle” runat=”server” />,我们可以这样设置标题
这里先准备一个方法
/**//// <summary>
/// 设置网页标题
/// </summary>
/// <param name=”_title”>网页标题</param>
protected void SetTitle(string _title)
{
setHeader(”PageTitle”,”<title>” + _title + “</title>”);
在WebFrom中我们就可以这样设置标题了
this.SetTitle(”吕的部落格”);
Description,Keywords等的方法一样,不过要设置Meta,这个就不讲了,可以看源码
下面我再说一下js与css的载入,这次我们用到的是PlaceHolder控件,为什么用这个不沿用Literal,自己想想
PlaceHolder一般只占用位置,方便我们动态加载控件,这样载入js与css就方便多了
首先了也是查找指定的PlaceHolder控件
/**//// <summary>
/// 查找LoadHeader的PlaceHolder容器
/// </summary>
/// <returns></returns>
private Control findHeader()
{
return this.FindControl(”LoadHeader”);
}再是动态加入控件
/**//// <summary>
/// 装载控件到PlaceHolder控件
/// </summary>
/// <param name=”_obj”></param>
protected void LoadPlaceHolder(HtmlGenericControl _obj)
{
objHeader = findHeader() as Control;
//载入脚本文件
if(objHeader != null)
{
objHeader.Controls.Add(_obj);
}
}要载入CSS或JS我们先用HtmlGenericControl创建子控件然后加到PlaceHolder控件中
/**//// <summary>
/// 载入指定的样式表文件
/// </summary>
/// <param name=”_cssPath”>样式表文件地址</param>
protected void LoadCss(string _cssPath)
{
HtmlGenericControl objCss = new HtmlGenericControl(”link”);
objCss.Attributes["rel"] = “stylesheet”;
objCss.Attributes["type"] = “text/css”;
objCss.Attributes["href"] = _cssPath;
objCss.Attributes["media"] = “screen”;
this.LoadPlaceHolder(objCss);
}
那我们在WebForm中要载入样式表只要使用
this.LoadCss(”样式表地址”);载入js一样,就不说了
在源码中我写的功能比这里说的强一点点,大家可以自己下了看看.
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
ASP.Net项目出错处理方法汇总
1:确认在“配置属性”中的“启用ASP.NET调试”为”True”
操作步骤:
VS环境里面,菜单-项目-项目属性(最下得选项)-配置属性(左边第二项)-Debugging-Enable Asp.Net Debugging 设置为True
作用:
确定调试器能过启动IIS来调试asp.net页面!
2:确认你的”web.config”中的”debug=true”
操作步骤
打开web.config文件,设置debug=”true”;
作用:配置调试器可以调试该应用程序
3:若你安装过wind2000 SP4后,则要在命令行执行”regsvr32 i aspnet_isap.dll”
操作步骤:
开始-运行-cmd-regsvr32 i aspnet_isap.dll
作用:
重新注册aspnet_isap.dll
4:在IIS里查看站点信息,选中”目录安全性”,里面有”匿名访问和身份验证控制”,再点击”编辑..”,确认”集成Windows身份验证”选项被选中
操作步骤:
我的电脑-右击-管理-应用程序管理-IIS-默认网站-你得站点-右击-目录安全性-认证和访问方式-勾选匿名访问和身份验证控制,编辑-勾选确认”集成Windows身份验证“
作用:
匿名访问:此处设置不是为了解决你得调试问题,是为了能够使局域网或者广域网中其他用户通过输入你得Ip和网站名称来访问该网站
集成Windows身份验证:刚建立得网站身份验证方式为Windows要求必须用windows用户身份访问该网站,不更该IIS,将无法正常调试!
5:在IE选项->”安全设置”->”自定义级别”里有”用户验”,确认选中”自动使用当前用户名和密码登录”
步骤上述已经详细
6:运行C:\WINNT\Microsoft.NET\Framework\v1.0.3705\aspnet_regiis.exe -i
操作步骤;
cd到C:\WINNT\Microsoft.NET\Framework\v1.0.3705\目录
aspnet_regiis.exe -i
或者start=all progames - visual studio.net 2003-visual studio.net tools - command prompt-aspnet_regiis.exe -i
作用:
重新注册当前得.net framework版本即(v1.0.3705)到iis,为了解决调试得时候出现您所运行得.net版本不是v1.1得问题
7:控制面板–管理工具–计算机管理–本地用户和组–用户,双击ASPNET用户,为其隶属于添加Administrators用户
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
ASP.NET入门随想之博德之门 类与实例
内力衡量人的武学修为,而逍遥派的北冥神功实在是宝贝,习此术之人,全身如同一个黑洞,瞬间就将他人一辈子的修炼积累掠为已有,美名其曰”北冥大水,非由自生”、”百川汇海,海纳百川”。
但虚竹却不知学习此术需要散去原先功力,所以当他被无涯子完全化成一个空空如也的和尚时,禁不住放声大哭。其实此举绝对可以理解,对于一个练武之人而言,内功象征积累,虚竹虽然笨了点,但二十几年的积累,顷刻间说没就没,不啻于精神世界的毁灭。
■ 计算的影响 - 面向过程编程思想
ASP程序员的老祖宗名叫冯·诺依曼,ASP程序员一直以来都按照他的谆谆教导活着。 ASP程序员从来就认为这个世界的所有事情就象人的一生,有一个起点,叫START,还有一个终点,叫END。他要处理的事情,就象人这辈子,从START走到END,没有回头路。
ASP程序员还认为,这个世界的所有事情就象人的一生,分成不同阶段,叫模块。每一个模块都要完成一个相互不同的任务,少年求学,青年生子,中年立命,老年不惑。
ASP程序员又认为,这个世界的所有事情都象人的一生,一共只有三种走法:有时是阔步向前,叫顺序;有时面临选择,叫分支;有时原地打转,徘徊不前,叫循环。
ASP程序员从来就把”不积跬步无以至千里”当着座右铭,所以他把所有类似的事情处理过程都积累起来,记忆成一个个函数,以后碰到同类型的事情,就去调用函数。
ASP程序员把这种活法叫着”面对过程编程思想”,他平时最关心的,就是过程的模型,最注意的,就是这些过程有没有类似的处理过程可以归纳成函数。
即使是面对网站登录这么件小小的事情,ASP程序员仍然遵循自已的信仰,先对这个过程建模,如图4-1,然后去调用以前所有积累的函数,精心编织这个过程的每一个环节:不是要用户提交登录数据吗?他用response.write 这支画笔按照顺序一笔一划地描述出用户填写页面;不是要校验格式吗?他调用JavaScript函数一个个地检查每一个<input>的value值;不是要审核数据吗?他读取用户数据后翻开厚厚的帐目一个个地查找核对;不是要结果吗?他要么带着用户跳转到指定页面,要么又调用函数告诉用户不要鱼目混珠。
所以ASP程序员活得很开心,他感觉世界尽在他的掌握之中。尽管很早以前有一个位名叫smlltalk的家伙告诉他的这种活法窝囊,当时ASP程序员只是感到不解;又来了个C++说他笨拙,他只是疑惑;还来了个JAVA在他面前耀武扬威,ASP程序员开始彷徨起来。直到有一天,小弟DotNet程序员学成归来,与之促膝长谈,终于,ASP程序员彻底动摇。冥冥之中,记起一位伟人告诫他要与时俱进。但尽管世界在变,ASP程序员依然放不下他多年所积蓄的内力,顷刻间说没就没,不啻于精神世界的毁灭。于是内心有两种呐喊在不断地交织,是在沉默中死去,还是凤凰涅槃?
■ 创世纪·六日 - 面向对象编程思想
DotNet程序员信奉OOP教,神是Framework。
第一日,神说,万物皆对象(object),对象有标识、状态与行为;
于是DotNet程序员在大脑中列出Login功能的所有对象:Login对象、Login.aspx页面对象、登录表单frmLogin对象、提示信息lblMessage对象、用户名文本域txtUserName对象、密码文本域对象txtPassword对象和登录按扭btnLogin对象。
第二日,神说,有相同特征和行为的对象抽象为类(class);对象即为类的一实例;
于是DotNet程序员把用户名文本域对象和密码文本域对象抽象成TextBox类,其余分别抽象成Login、Login.aspx、HtmlForm、Label、Button类,并分别实例了类。
第三日,神说,对象的相同特征抽象为属性,相同的行为处理抽象为方法;
于是DotNet程序员把实例frmLogin、lblMessage、txtUserName、txtPassword、btnLogin定义成Login类的属性、并定义方法btnLogin_Click。
private void btnLogin_Click(object sender, System.EventArgs e) {
if ((txtUserName.Text==”孙二娘”)&&(txtPassword.Text==”十字坡”))
lblMessage.Text=”热烈欢迎世界著名武打巨星孙二娘小姐回乡考察投资”;
else
lblMessage.Text=”靠,这年头什么都有假的!”;
}
第四日 神说,类要封装;
于是DotNet程序员在类标识、属性和方法前都分别加上public、private、protected。
第五日 神说,类可以继承和合成;
于是DotNet程序员把Login.aspx定义成Login的派生类,在Login.aspx开头加上如下声明语句:
<%@ Page Inherits=”WebApplication1.Login” %>
第六日 神说,类有多态。
于是DotNet程序员对自己说,我暂时不需要,随后躺下。
很快他就睡着,只听见他的梦呓缓缓传来:六日,我就拖几个控件,定义几个ID,加一段事件处理代码,感谢万能的主framework和他的忠实仆役Visual Studio,吸星***,爽!
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
ASP.NET 翻页后继续维持排序(1)
要想实现翻页后继续排序,实现这样的效果:
比如共 15笔记录,每页显示10条
则排序时:第一页将前10条记录排序,翻第二页时后五条再单独排序.
要注意以下几点:
1.如果数据很多,最好不要把数据集放到缓存中(viewstate),影响性能
2. ViewState中存放上次是哪个e.expression并且存放此e.expression是升序还是降序
示例如下:
1.现有的排序事件是这样写的,这个是点击上面排序标题时用:
private void grdProjTrace_SortCommand(object source, DataGridSortCommandEventArgs e)
{
this.grdProjTrace.CurrentPageIndex = 0;
DataView dv = 得到数据代码;
string strSort = “”;
string strOrder =”";//排序方式。0,降序,1升序
if(ViewState["SortExpresstion"] != null)
{
strSort = ViewState["SortExpresstion"].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState["SortExpresstion"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(e.SortExpression == “CustomerName”)
{
if(strSort != “CustomerName”)
{
this.ViewState["SortExpresstion"] = ustomerName0″;
dv.Sort = “CustomerName DESC”;
}
else
{
if(strOrder == “0″)
{
this.ViewState["SortExpresstion"] = “CustomerName1″;
dv.Sort = “CustomerName ASC”;
}
else
{
this.ViewState["SortExpresstion"] = “CustomerName0″;
dv.Sort = “CustomerName DESC”;
}
}
}
if(e.SortExpression == “fullName”)
{
if(strSort != “fullName”)
{
this.ViewState["SortExpresstion"] = “fullName0″;
dv.Sort = “fullName DESC”;
}
else
{
if(strOrder == “0″)
{
this.ViewState["SortExpresstion"] = “fullName1″;
dv.Sort = “fullName ASC”;
}
else
{
this.ViewState["SortExpresstion"] = “fullName0″;
dv.Sort = “fullName DESC”;
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
ASP.NET 翻页后继续维持排序(2)
2.下面这个方法是自己写的,翻页事件中调用。
private void ChangePageDataBind()
{
DataView dv = 得到数据代码;
string strSort = “”;
string strOrder =”";//排序方式。0,降序,1升序
if(ViewState["SortExpresstion"] != null)
{
strSort = ViewState["SortExpresstion"].ToString();
strSort = strSort.Substring(0,strSort.Length -1);
strOrder = ViewState["SortExpresstion"].ToString();
strOrder = strOrder.Substring(strOrder.Length -1);
}
if(this.ViewState["SortExpresstion"] != null)
{
if(strSort == “CustomerName”)
{
if(strOrder == “1″)
{
this.ViewState["SortExpresstion"] = “CustomerName1″;
dv.Sort = “CustomerName ASC”;
}
else
{
this.ViewState["SortExpresstion"] = “CustomerName0″;
dv.Sort = “CustomerName DESC”;
}
}
}
if(this.ViewState["SortExpresstion"] != null)
{
if(strSort == “fullName”)
{
if(strOrder == “1″)
{
this.ViewState["SortExpresstion"] = “fullName1″;
dv.Sort = “fullName ASC”;
}
else
{
this.ViewState["SortExpresstion"] = “fullName0″;
dv.Sort = “fullName DESC”;
}
}
}
this.grdProjTrace.DataSource = dv;
this.grdProjTrace.DataBind();
}
上面两方法只要修改要排序的字段名,就可以直接调用了.
1、方法很简单实用,这里就不说了。
2、方法是这样用的:
private void grdProjTrace_PageIndexChanged(object source, DataGridPageChangedEventArgs e)
{
try
{
try
{
this.grdProjTrace.CurrentPageIndex = e.NewPageIndex;
}
catch
{
this.grdProjTrace.CurrentPageIndex = 0;
}
this.ChangePageDataBind();
}
catch(System.Exception errWS)
{
//异常
}
}
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
谈谈HtmlControl与WebControl的区别与用途
Web控件和Html控件虽然好多功能相同并且长得很像
但是它们的内部实现机制是完全不一样的
Web控件要比Html控件执行效率要好
1. 使用起来也相当方便,举个简单的例子,例如Button的生成:
Html控件是将庞大控件集合全部弄到页面中,用到哪个功能,就设置一下属性,如下:
<input type=submit/button runat=server>
这样会占用相当大的控件资源
Web控件是将集成式的拆解成单功能的:
<asp:button id=”btnOK” />
这样就可以节省不必要的控件所占用的资源了
2.Web控件具有回送功能,能够用ViewState维持控件的状态.
Html控件则不能,当点击页面的操作,其状态就会丢失.
可以做这样的一个实验:
I. 分别建立两个文件: a.html b.aspx
II.在a.html页面中加Html控件的RadioButton和一个button,
在b.aspx中加Web控件的RadioButton和一个button
III.a.html直接双击浏览器运行,b.aspx通过IIS运行
IV.在a.html运行界面中,选中RadioButton,再单击Button按钮,会发现RadioButton会
取消选中(丢失其状态),但在b.aspx页面执行同样的操作,RadioButton不会丢失,因为ViewState
给它保存了状态. 您可以在运行界面点击浏览器菜单”查看”->“源文件”,打开Html代码文件,
找到加密后的ViewState,类似于下面:
<input type=”hidden” name=”_VIEWSTATE” value=”dDw0ajfmafmjfzzmj4″/>
其实ViewState实现原理也是将一些信息放到隐藏的一个控件中,并且asp.net生成的ViewState信息
是存储在客户端的
这里要注意的一点是:
只有当格式为*.aspx文件,并且控件具有属性:”runat=server”时,回送功能才能打开
3. Html控件与Web控件最大的区别是它们对事件处理的方法不同。对于Html窗体控件,
当引发一个事件时,浏览器会处理它。但对于Web控件,事件仅由浏览器生成,但浏览
器不会处理它,客户端要给服务器发个信息,告诉服务器处理事件。 不过有些事件,
比如:
按下键/移动/鼠标等事件,Asp.net中没有这些事件
(因为这些事件即时性强,服务器处理得不够及时),这时候Html控件就发挥其作用了,结合Html事件
协助完成.
如下是一些Html常用的事件:
在浏览器上执行的Html控件事件:
单击时触发:
<INPUT type=”button” value=”Click Me” onclick=”alert(’Hi,你好!’);”>
鼠标弹起时触发:
<INPUT type=”button” value=”Click Me” onmouseup=”alert(’Hi,你好!’);”>
//悬浮在控件上方时触发
<INPUT type=”button” value=”Click Me” onmouseover=”alert(’Hi,你好!’);”>
//鼠标在控件上方移动时触发
<INPUT type=”button” value=”Click Me” onmousemove=”alert(’Hi,你好!’);”>
//双击控件时触发
<INPUT type=”button” value=”Click Me” ondblclick=”alert(’Hi,你好!’);”>
//当焦点在控件时,按键时触发
<INPUT type=”button” value=”Click Me” onkeypress=”alert(’Hi,你好!’);”>
//按键按下时触发
<INPUT type=”button” value=”Click Me” onkeydown=”alert(’Hi,你好!’);”>
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
随机得到Access数据库记录
由于Access数据库记录集缓存的原因,从代码里得到Access数据库随机记录是得不到,需要用随机SQL语句的办法来消除缓存。
下面就是例子:
查看例子http://dotnet.aspx.cc/Exam/GetRandom.aspx
<%@ Page Language=”C#” Debug=”true” %>
<%@ import Namespace=”System.Data” %>
<%@ import Namespace=”System.Data.OleDb” %>
<title>随机得到Access数据库记录</title>
<script runat=”server”>
void Page_Load(Object src,EventArgs e)
{
if(!IsPostBack)
{
string MyConnString = “Provider=Microsoft.Jet.OleDB.4.0;Data Source=”
+ Server.MapPath(”aspxWeb.mdb.ascx”);
Random R = new Random();
int intRandomNumber = R.Next(1,1000);
string sql = “select top 10 id As 序号,Title As 标题 from Document Order By Rnd(”
+ (-1 * intRandomNumber).ToString() + “*id)”;
OleDbConnection MyConnection = new OleDbConnection(MyConnString);
MyConnection.Open();
OleDbCommand cmd = new OleDbCommand(sql,MyConnection);
OleDbDataReader dr = cmd.ExecuteReader();
DataGrid1.DataSource = dr;
DataGrid1.DataBind();
cmd.Dispose();
MyConnection.Close();
MyConnection.Dispose();
MyConnection = null;
}
}
</script>
<form runat=server>
<asp:DataGrid id=”DataGrid1″ HorizontalAlign=”Center”
Width=”600px” runat=”server” Font-Size=”9pt”>
<AlternatingItemStyle BackColor=”#EEEEEE”></AlternatingItemStyle>
<HeaderStyle BackColor=”#AAAADD” Font-Bold=”True” HorizontalAlign=”Center” />
</asp:DataGrid>
</form>
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.
asp.net 2.0中的URL重写以及urlMappings问题(1)
在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.RegexOpti…piled | 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();
//}
}
};
}
}
摘自 :电脑学习文摘 .
文章发表于 asp.net精选文摘.