URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。
   比如浏览器发来请求hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/list.aspx?id=101。
 下载MS的URLRewriter.dll,放到你的web程序的bin下

下载完成后,在web.config里设置如下:

代码

<?xml version="1.0" encoding="utf-8" ?>
<!--overred-->
<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>
    </system.web>
</configuration>

其中

<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />

用于指定配置节"RewriterConfig"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter .dll文件中

关键的是这两句

<LookFor>~/d(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>

< LookFor>~/d(\d+)\.aspx</LookFor>表示,用户输入的url,d(\d+)\.aspx是 url中文件名匹配的正则表达式(此处为字母d开头,后面跟一个或多个数字,并以.aspx结尾。用户也可根据自己的需要自行设定)。
<SendTo> ~/default.aspx?id=$1</SendTo>,表示当服务器接收到符合上面条件的请求后如何重写url。此处表示访问 defalutl.aspx并传入参数id,其值$1将用用户请求的文件名中的第一个数字来表示。
例如用户输入  hostname/d11.aspx,服务器会把他重写为http://hostname/default.aspx?id=11。换句话说用户输入 http: //hostname/d11.aspx,实际访问的是http://hostname/default.aspx?id=11。这样就起到了隐藏真实文件名,并便于用户记忆的作用。

处理回发
在重写后的url里如果产生回发,例如有一个按钮,又调用了该被重写的 aspx,用户浏览器中将会显示该aspx文件实际的地址,也就是http: //hostname/default.aspx?id=11。但从用户的角度考虑,如 果单击按钮时突然看到 URL 更改会使他们感到不安。因此必须解决这个问题。
解决方法有二:
(1)自己定义一个Actionlessform类,在aspx中不再使用系统提供的form 标记

代码

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);
          }
     }
}

创建此类并对其进行编译之后,要在 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>

个人并不推荐该方法
(2)第二种方法就是继承page,这样你不需要在aspx页中改任何东西。
代码:

代码

using System;
using System.IO;
using System.Web;
using System.Web.UI;
namespace URL
{
     public class OLPage : Page
     {
         public OLPage()
         {}
         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)
     {
         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,并在你的项目中引用它。

然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。
例如
public class WebForm1:page
改写为
public class WebForm1:URL.OLPage

这样就解决回发问题。
编译*.dll方法:/t:library name.cs

转载于:https://www.cnblogs.com/MicroGoogle/archive/2010/02/01/1660960.html

URL重写,asp.net URL重写,URLRewriter.dll下载相关推荐

  1. asp.net 使用UrlRewritingNet.UrlRewriter组件URL重写,伪静态详解

    目录 URL重写的业务需求 ReWritingNet组件主要功能 配置IIS(IIS7/8环境下) 程序代码 重写规则 一,URL重写的业务需求 顾客可以直接用浏览器bookmark功能将页面连结储存 ...

  2. asp.net url 重写解决方案

    大家都知道很多网站特别是大型网站现在都用了url伪静态重写来实现用户的易用性和美观性,比如这个网站 http://www.xintaifcw.com 很明显采用了url重写,里面的所有文章内容都是用了 ...

  3. ASP.NET URL Rewrite. URL重写

    URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程.   比如浏览器发来请求hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/ ...

  4. 技巧/诀窍:在ASP.NET中重写URL(转)

    [原文地址]Tip/Trick: Url Rewriting with ASP.NET [原文发表日期] Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动 ...

  5. asp.net url重写相关技术问题整理

    1.IIS7配置URL重写需要注意系统是32位还是64位的 在IIS7配置URL重写的时候,需要添加"脚本映射",如果是64位系统,会有两个地方存放.net framework分别 ...

  6. 技巧/诀窍:在ASP.NET中重写URL

    [原文地址]Tip/Trick: Url Rewriting with ASP.NET [原文发表日期] Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动 ...

  7. 转: 技巧/诀窍:在ASP.NET中重写URL

    转: http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx [原文地址]Tip/Trick: Url Rewriting with ...

  8. asp.net mvc、asp.net url重写 Url Rewrite

    最近在做一个cms手机网站,由于内容不是很多,很快做完了.空闲的时间考虑seo,想把url全部写成静态的.在查资料的时候,发现 UrlRewrite.Net这个组件非常的不错,尝试了下结果达到了理想的 ...

  9. ASP.NET URL重写浅析

    详细参见: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx 最简单的实现,就是在 G ...

  10. ASP.NET Url重写

    新建一个类,并实现IHttpModule接口 实现接口,在Init方法中处理请求,在请求方法中实现具体的Url重写操作 补充Url重写方法,通过 Request的Path对象获取请求文件路径,并根据请 ...

最新文章

  1. boot返回码规范 spring_SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
  2. git 配置origin_git配置及操作
  3. Java 接口和抽象类的区别
  4. 为排序使用索引OrderBy优化
  5. 服务号idbase64_微信公众号-上传图片顺便转base64
  6. linux 命令终端显示-bash-4.2#解决方法
  7. android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
  8. 明明可以靠技术吃饭,现在却非要出来当编剧!
  9. FID使用(Frechet Inception Distance score)
  10. java 端口_java – 如何找到可用的端口?
  11. 12月炼丹项目:信息抽取与知识图谱,预训练模型,文本生成,对话系统
  12. MFQPPDCS测试理论(海盗派测试分析)
  13. Enolsoft PDF Converter with OCR Mac(PDF格式转换及OCR识别软件)
  14. 2021最火爆带字微信朋友圈背景
  15. OJ 1308 让人头疼的“双十一”
  16. matlab不支持复数输入,高版本MATLAB中medfilt1函数不支持复数问题
  17. django Using the URLconf defined in test02.urls, Django tried these URL patterns, in this order:
  18. kafka中文教程(一)
  19. R语言读取 文件 中文乱码,R语言画图 中文不显示
  20. 一百种消灭无聊的方法

热门文章

  1. 德赛西威280b升级_牵手英伟达/德赛西威 理想自动驾驶蓝图初现
  2. Bean获取Spring容器
  3. 【渝粤教育】电大中专计算机职业素养 (6)作业 题库
  4. 【渝粤教育】电大中专电商运营实操 (17)作业 题库
  5. 【渝粤教育】广东开放大学 演绎娱乐经验管理 形成性考核 (49)
  6. Pandas系列(十一)Pandas中concat合并两个dataframe
  7. C++ Primer Plus 第三章编程练习
  8. [UOJ386]鸽子固定器
  9. SpringMvc 文件上传后台处理
  10. 【转】取画刷(HBrush)的6种方法