惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Proofpoint News Feed
D
DataBreaches.Net
D
Docker
云风的 BLOG
云风的 BLOG
大猫的无限游戏
大猫的无限游戏
月光博客
月光博客
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
罗磊的独立博客
Martin Fowler
Martin Fowler
U
Unit 42
Engineering at Meta
Engineering at Meta
IT之家
IT之家
Vercel News
Vercel News
B
Blog RSS Feed
人人都是产品经理
人人都是产品经理
博客园 - Franky
博客园 - 【当耐特】
Stack Overflow Blog
Stack Overflow Blog
G
Google Developers Blog
MongoDB | Blog
MongoDB | Blog

博客园 - 天若有情

解密不同编码的参数 - 天若有情 - 博客园 出现“创建挂起的文件操作”解决办法 asp使用绑定变量方法 利用C#来重启另一个程序 - 天若有情 - 博客园 实用Javascript代码段 - 天若有情 - 博客园 防止图片把网页撑大的代码 增加和删除Html节点方法: - 天若有情 - 博客园 .net Framework 2.0 发送邮件 转载:网站策划方案写作、演示标准 检测是否还有黑客代码的asp.net函数 - 天若有情 - 博客园 显示指定的错误页面,同时把错误信息写入系统日志文件 - 天若有情 - 博客园 关于错误处理的自定义错误页面 - 天若有情 - 博客园 C#页面统一错误处理 - 天若有情 - 博客园 一个处理数据库异常的类,按照错误码弹出提示信息 一个正则表达式的类 多行文本框限制输入字符长度(两种方法) ASP.NET程序中常用代码汇总(二) ASP.NET程序中常用代码汇总(一) 自建工具集开发文档------异常处理(1.0.0.1)
asp.net URL重写续
天若有情 · 2006-09-06 · via 博客园 - 天若有情

昨天写了个URL重写,因为在重写后的URL里有一个小小的Bug的,就是在Post数据时会把原URL里的地址变成GET。

比如原地址URL为:

http://localhost/Test/Default.aspx
重写后的URL:http://localhost/Test/2004/12/News.aspx
而在Default.aspx文件里有Post数据(如Post文本)。那么这时重写后的URL就会变为:http://localhost/Test/2004/12/News.aspx?ID=12

显然,这不是我们想要的URL也不是标准的。

其实,有细读过在MS上的MSDN里的这篇文章的朋友都知道,里面已经有讲述了且问题也已经解决了的。

http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx

可能上面链接的文档相对较长,有朋友读完到URL重写后就没再往下看了。在文章下头里有细说明,怎么个把Form的Action清除掉。这里我所插一句的是:在ASP.net的页面WebForm里,一个页面只能有一个Form,但同时,这个Form的Action是不可变的(即只能Post数据回本页面)。如需要变动,则要自己写一个Form控件,此控件继承System.Web.UI.HtmlControls.HtmlForm接口。

这里是URLRewriter的源码下载:

http://upserver2.ys168.com/ys168up/D1/ys1.aspx?f=MSDNURLRewriting.msiy71z73f8b3f8b4b0f8z95b6
b1f9b5f9f5f9b1f8b0b2b1f6e09e15e05e24b1b0f2b0f9f9b1f6b7f8b1z

在这个源码中,找到URLRewriter.dll和ActionlessForm.dll这两个DLL文件。其实一整个源码就只有这两个文件有用的。
第一个不用多说了,前文已经说了怎么用这个DLL。对于ActionlessForm.dll这个就是一个控件,用法也很简单:

首先把ActionlessForm.dll拷入你的项目中的bin目录,然后在你的VS.net的项目中引用这个dll。再在你原有的(即没重写的).aspx页面中

第一步:把这句加于代码顶部:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
第二步:
<form id="Form1" method="post" runat="server">和</form>
替换成:
<skm:Form id="Form1" method="post" runat="server">和</skm:Form>

OK,现在你可以再运行程序试试了。
----------

附:为什么URL就会变为:

http://localhost/Test/2004/12/News.aspx?ID=12
其实很简单,因为在web.config中有这样的一句:
<SendTo>~/Default.aspx?ID=$2</SendTo>
在没有替换form之前,你查看页面的源码就可以看到,你的form的Action是到(以上面的例子):Default.aspx?ID=12
即.aspx页面最后生成的HTML是:
<form id="Form1" name="Form1" method="post" action="Default.aspx?ID=12"></form>

还有,如果想用URL重写后的格式为以目录形式即不用加Default.aspx:

http://localhost/Test/2004/12
则要新建相应的目录和文件Default.aspx。
如上例子:http://localhost/Test/2004/12
则要新建2004目录和在此目录下新建12目录,再在12目录下新建Default.aspx文件。文件内容可为空。

至于为什么,是因为IIS如没有找到目录或文件时会报错。 

http://community.csdn.net/Expert/TopicView1.asp?id=4218777
--------------
附:URL重写
http://www.cnblogs.com/HD/archive/2005/06/20/177633.html
http://www.cnblogs.com/HD/archive/2005/06/21/178367.html

转自:

http://www.yaosansi.com/blog/trackback.asp?tbID=187