在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>
/******************************************/
以上的方法:页面会出现创建控制项发生错误情况,接下来介绍不用以上的方法
将页面的<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>删除,将 :<skm:Form id="Form1" method="post" runat="server">
(如果有)替换为<form runat="server">并将右边的 </skm:form> 标记替换为:</Form>
然后执行下面的做法
(2)以上的是继承个form,第二种方法就是继承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
这样就解决回发问题。
(3)通过客户端代码清除form的action。 对于ASPX页面,我们在客户端查看代码时会发现,它自动为form加入了action,并且地址就是开头所说的原始页面地址。而对于ASPX页面,若当它的action为空时也就将回发到当前地址。这样我们就可以通过在客户端清除action的方法,来实现回发后继续保持有地址。
在页面中加入以下代码即可:
<script type="text/javascript">try{document.forms[0].action=""}catch(ex){}</script>
这种方法应是最简单的,而且也不用改动原来的代码。
相关推荐:
SEO技巧提升网站流量和排名,助力企业快速崛起,ai080206.
pbootcms自动翻译插件,让你的网站轻松实现多语言覆盖,ai 镀金
自动生成文章的AI软件,助力内容创作的未来
AI做文章:引领智能创作的未来
怎么降低文章的AI生成率:打造更真实、更有价值的内容
chatai写作免费一键生成,轻松解决写作难题!,陈逗逗ai换脸在线看
SEO汇报:如何通过数据分析提升网站排名,助力企业业绩增长,免费推广网站大全百度经验
SEO工装裤-打造时尚与实用兼备的工作利器,ai画中国爸爸辅导孩子写作业
pbootcms前端翻译插件-轻松实现网站多语言支持,拓展全球市场,st ai绘画
ChatGPT:我目前无法查看或解析附件,您是否遇到过这样的困扰?,ai+燃烧
SEO观察:2025年搜索引擎优化的新趋势与机遇,seo2是什么状态
未来写作新模式文章撰写AI如何助力内容创作
SEO教你如何快速提升网站排名,打破竞争壁垒!,本溪seo优化排名公司
企业关键字-助力企业成功的隐形动力,闽侯县企业网站建设
ChatGPT-01:开创人工智能新纪元,AI如何画模糊的云层
seo需要什么能力,seo需要哪些技术 ,ai长条弯曲
什么是seo伪原创,seo就业前景伪原创怎么写 ,头像ai画怎么弄
从零到一:网站历史的演变与未来趋势,肇庆市国外网站建设平台
中外链:打通全球流量的桥梁,提升网站排名与流量的双重保障,行业网站建设思路
SEO怎么设置:让你的网站快速登上搜索引擎首页的秘密,Ai压印分色
SEO外包:提升网站排名与品牌曝光的最佳选择,大创建设网站
AI网站开发与代码创新:引领未来数字化变革的关键,ai ay规则
AI工具,让工作效率翻倍:AI工具教程全面解析
SEO兼职:如何通过SEO兼职实现收入增长与职业突破,濮阳网站建设官网
SEO专业怎么样?未来发展的无限潜力与职业前景,联通ai智能早教
AI免费工具:提升效率与创意的秘密武器
ChatGDP人工智能:未来科技赋能企业与个人的智能变革,如何用AI绘制人体
seO经理是什么岗位,seo经理招聘 ,ai写作重复被查
SEO优化流程:助力网站快速提升排名的关键策略,1745ai
SEO查:如何用精准的SEO诊断助力网站流量爆发,美团关键词排名怎么补
360ai答题-赋能教育,开启智能学习新纪元,ai 果汁
什么是seo的豆子,何为seo ,ai圆复制
SEO怎么排名?这5大技巧,轻松提升网站排名,人人都可ai
打造内容创作新高度:文章扩写AI的革命性优势
seo跟sem是什么,seo和sem的概念 ,惠威的ai功能
SEO详解:如何优化你的网站提升排名,获得更多流量,伊春湖南网站优化推广
SEO任何:如何通过精准优化让网站流量突破极限,太原网站建设培训班
为什么说seo这么重要,seo重要吗 ,ai19920403
文章AI生成标题:让创作更轻松,内容更精彩
产品seo什么意思,产品seo标题是什么 ,ai模仿张宇
seo都有什么意思,seo 啥意思 ,ai园林
为什么“搜狗不收录”会成为企业SEO的新挑战?,烤肉店的线下营销与推广
AI智能时代的到来:如何利用人工智能推动生活与商业创新,ai相册下载
“关键词指白”:揭秘如何通过精准关键词优化实现流量暴增,全面分析网站seo
SEO超级,助力企业站点冲刺搜索引擎排名,白云全网营销推广哪家强
ChatGPT无法完全显示?你可能忽略了这些令人惊讶的细节!,朵朵ai绘画
seo经理做什么的,seo经理招聘 ,盲人ai眼镜
洗文章AI:让内容创作变得更智能、更高效
AI人工智能文章生成平台,释放创作无限可能
文章AI指令提升写作效率的智能助手