URL重写,asp.net URL重写,URLRewriter.dll下载
URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。
比如浏览器发来请求hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/list.aspx?id=101。
下载MS的URLRewriter.dll,放到你的web程序的bin下
下载完成后,在web.config里设置如下:
<!--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>
其中
用于指定配置节"RewriterConfig"的处理程序类的名称为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目录下的URLRewriter .dll文件中
关键的是这两句
<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 标记
{
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.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下载相关推荐
- asp.net 使用UrlRewritingNet.UrlRewriter组件URL重写,伪静态详解
目录 URL重写的业务需求 ReWritingNet组件主要功能 配置IIS(IIS7/8环境下) 程序代码 重写规则 一,URL重写的业务需求 顾客可以直接用浏览器bookmark功能将页面连结储存 ...
- asp.net url 重写解决方案
大家都知道很多网站特别是大型网站现在都用了url伪静态重写来实现用户的易用性和美观性,比如这个网站 http://www.xintaifcw.com 很明显采用了url重写,里面的所有文章内容都是用了 ...
- ASP.NET URL Rewrite. URL重写
URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程. 比如浏览器发来请求hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/ ...
- 技巧/诀窍:在ASP.NET中重写URL(转)
[原文地址]Tip/Trick: Url Rewriting with ASP.NET [原文发表日期] Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动 ...
- asp.net url重写相关技术问题整理
1.IIS7配置URL重写需要注意系统是32位还是64位的 在IIS7配置URL重写的时候,需要添加"脚本映射",如果是64位系统,会有两个地方存放.net framework分别 ...
- 技巧/诀窍:在ASP.NET中重写URL
[原文地址]Tip/Trick: Url Rewriting with ASP.NET [原文发表日期] Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动 ...
- 转: 技巧/诀窍:在ASP.NET中重写URL
转: http://blog.joycode.com/scottgu/archive/2007/03/01/94004.aspx [原文地址]Tip/Trick: Url Rewriting with ...
- asp.net mvc、asp.net url重写 Url Rewrite
最近在做一个cms手机网站,由于内容不是很多,很快做完了.空闲的时间考虑seo,想把url全部写成静态的.在查资料的时候,发现 UrlRewrite.Net这个组件非常的不错,尝试了下结果达到了理想的 ...
- ASP.NET URL重写浅析
详细参见: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx 最简单的实现,就是在 G ...
- ASP.NET Url重写
新建一个类,并实现IHttpModule接口 实现接口,在Init方法中处理请求,在请求方法中实现具体的Url重写操作 补充Url重写方法,通过 Request的Path对象获取请求文件路径,并根据请 ...
最新文章
- boot返回码规范 spring_SpringBoot 系列 web 篇之自定义返回 Http Code 的 n 种姿势
- git 配置origin_git配置及操作
- Java 接口和抽象类的区别
- 为排序使用索引OrderBy优化
- 服务号idbase64_微信公众号-上传图片顺便转base64
- linux 命令终端显示-bash-4.2#解决方法
- android viewpager fragment传值,Android开发中如何解决Fragment +Viewpager滑动页面重复加载的问题...
- 明明可以靠技术吃饭,现在却非要出来当编剧!
- FID使用(Frechet Inception Distance score)
- java 端口_java – 如何找到可用的端口?
- 12月炼丹项目:信息抽取与知识图谱,预训练模型,文本生成,对话系统
- MFQPPDCS测试理论(海盗派测试分析)
- Enolsoft PDF Converter with OCR Mac(PDF格式转换及OCR识别软件)
- 2021最火爆带字微信朋友圈背景
- OJ 1308 让人头疼的“双十一”
- matlab不支持复数输入,高版本MATLAB中medfilt1函数不支持复数问题
- django Using the URLconf defined in test02.urls, Django tried these URL patterns, in this order:
- kafka中文教程(一)
- R语言读取 文件 中文乱码,R语言画图 中文不显示
- 一百种消灭无聊的方法
热门文章
- 德赛西威280b升级_牵手英伟达/德赛西威 理想自动驾驶蓝图初现
- Bean获取Spring容器
- 【渝粤教育】电大中专计算机职业素养 (6)作业 题库
- 【渝粤教育】电大中专电商运营实操 (17)作业 题库
- 【渝粤教育】广东开放大学 演绎娱乐经验管理 形成性考核 (49)
- Pandas系列(十一)Pandas中concat合并两个dataframe
- C++ Primer Plus 第三章编程练习
- [UOJ386]鸽子固定器
- SpringMvc 文件上传后台处理
- 【转】取画刷(HBrush)的6种方法