|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
URL 重写就是把URL地址重新改写(汗^_^)。 详情:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx 长处:把url缩短等 用法:1.下载ms的URLRewrite.dll,放到你的bin下 2.在web.config里设置如下: <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" /> </configSections> <RewriterConfig> <Rules> <RewriterRule> <LookFor>~/d(d+).aspx</LookFor> <SendTo>~/default.aspx?id=$1</SendTo> </RewriterRule> </Rules> </RewriterConfig> <system.web> <httpHandlers> <add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" /> </httpHandlers> 然后在cs里写: private void Page_Load(object sender, System.EventArgs e) { // 在此处放置用户代码以初始化页面 Response.Write(Request.QueryString["id"]+"<BR>"); Response.Write("haha"); } 只要输入 localhost/overred/d123.aspx(注重:开头必须为d,后为数字) 其实这个d123.aspx是虚拟的,并不是实际存在的。只要符合格式就行。 他就会跳到http://localhost/overred/default.aspx 而且他在default里可以捕获一些参数比如id,就是你的d后的数字(后必须为数字),这样你就可以显示id为123的文章。 在重写后的url里假如产生回发将会传递到d123.aspx,这样用户在点button时会看到哪个实际的地址,msdn上说的:但从用户的角度考虑,假如单击按钮时忽然看到 URL 更改会使他们感到不安。 可见ms把客户捧为他的上帝!(真的?#¥%……―*) 继承引用ms: 出现这种情况的原因是:在呈现 Web 窗体时,它会将其操作属性直接设置为 Request 对象中文件路径的值。当然,在呈现 Web 窗体时,URL 已从 /Products/Beverages.aspx 重写为 ListProductsByCategory.aspx?CategoryID=1,这表明 Request 对象报告用户要访问 ListProductsByCategory.aspx?CategoryID=1。只需使服务器端窗体不呈现操作属性即可解决此问题。(默认情况下,假如窗体不包含操作属性,浏览器将会回发。) 不幸的是,Web 窗体不答应您明确指定操作属性,也不答应您设置某些属性以禁用操作属性的呈现。因此,我们必须自己来扩展 System.Web.HtmlControls.HtmlForm 类,覆盖 RenderAttribute() 方式并明确指出它不会呈现操作属性。 由于继续功能,我们可以获得 HtmlForm 类的所有功能,并且只需添加几行代码即可获得所需的行为。以下显示了自定义类的完整代码: namespace ActionlessForm { public class Form : System.Web.UI.HtmlControls.HtmlForm { protected override void RenderAttributes(HtmlTextWriter writer) { writer.WriteAttribute("name", this.Name); base.Attributes.Remove("name"); writer.WriteAttribute("method", this.Method); base.Attributes.Remove("method"); this.Attributes.Render(writer); base.Attributes.Remove("action"); if (base.ID != null) writer.WriteAttribute("id", base.ClientID); } } } 已被覆盖的 RenderAttributes() 方式的代码仅包含 HtmlForm 类的 RenderAttributes() 方式的正确代码,而不设置操作属性。(我使用 Lutz Roeder 的 Reflector 来查看 HtmlForm 类的源代码。) 创建此类并对其进行编译之后,要在 ASP.NET Web 应用程序中使用它,应首先将其添加到 Web 应用程序的 References 文件夹中。然后,要使用它来代替 HtmlForm 类,只需在 ASP.NET 网页的顶部添加以下内容即可: <%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %> 然后,将 <form runat="server">(假如有)替换为: <skm:Form id="Form1" method="post" runat="server"> 并将右边的 </form> 标记替换为: </skm:Form> 以上的是继续个form,其实还有更简朴的,就是继续page,这样你不需要在aspx页中改任何东西。 代码: using System; using System.IO; using System.Web; using System.Web.UI; namespace URl { /**//// <summary> /// 页面基类www.knowsky.com /// </summary> public class OLPage : Page { public OLPage() { } /**//// <summary> /// 重写默认的HtmlTextWriter方式,修改form标记中的value属性,使其值为重写的URL而不是真实URL。 /// </summary> /// <param name="writer"></param> protected override void Render(HtmlTextWriter writer) { if (writer is System.Web.UI.Html32TextWriter) { writer = new FormFixerHtml32TextWriter(writer.InnerWriter); } else { writer = new FormFixerHtmlTextWriter(writer.InnerWriter); } base.Render(writer); } } internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter { private string _url; // 假的URL internal FormFixerHtml32TextWriter(TextWriter writer):base(writer) { _url = HttpContext.Current.Request.RawUrl; } public override void WriteAttribute(string name, string value, bool encode) { // 假如当前输出的属性为form标记的action属性,则将其值替换为重写后的虚假URL if (_url != null && string.Compare(name, "action", true) == 0) { value = _url; } base.WriteAttribute(name, value, encode); } } internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter { private string _url; internal FormFixerHtmlTextWriter(TextWriter writer):base(writer) { _url = HttpContext.Current.Request.RawUrl; } public override void WriteAttribute(string name, string value, bool encode) { if (_url != null && string.Compare(name, "action", true) == 0) { value = _url; } base.WriteAttribute(name, value, encode); } } } 你把他封装成dll,以后只要添加引用就可以拉! 返回类别: 教程 上一教程: 挂QQ的网页源代码[ASP/PHP/JS] 下一教程: 如何使REPLACE方式不区分大小写 您可以阅读与"ASP.NET中执行URL重写"相关的教程: · 在ASP程序中执行SQL语句的安全性问题 · 在ASP中执行PING命令,并且返回结果 · 解决在ASP中执行数据库查询中的特别字符的问题 · ASP学习:URLDECODE 方式补遗 · 亲密接触ASP.Net(9) |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |