仓酷云

标题: ASP.NET网站制作之.net下完成URL重写,静态页面 [打印本页]

作者: 简单生活    时间: 2015-1-16 22:24
标题: ASP.NET网站制作之.net下完成URL重写,静态页面
我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。URL重写是截取传进Web哀求并主动将哀求重定向到其他URL的历程。好比扫瞄器发来哀求hostname/101.aspx,服务器主动将这个哀求中定向为http://hostname/list.aspx?id=101。一甚么是url重写
URL重写是截取传进Web哀求并主动将哀求重定向到其他URL的历程。好比扫瞄器发来哀求hostname/101.aspx,服务器主动将这个哀求中定向为http://hostname/list.aspx?id=101。
url重写的长处在于:
l延长url,埋没实践路径进步平安性
l易于用户影象和键进。
l易于被搜刮引擎收录
二完成url重写的基础办法
1.下载ms的URLRewriter.dll,放到你的web程序的bin下
下载地点1:http://www.sinoec.cn/fordown/URLRewriter.dll
下载地点2:
download.microsoft.com/download/0/4/6/0463611e-a3f9-490d-a08c-877a83b797cf/MSDNURLRewriting.msi
下载完成后,在web.config里设置以下:
<?xmlversion="1.0"encoding="utf-8"?>
<!--overred-->
<configuration>
<configSections>
<sectionname="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>
<addverb="*"path="*.aspx"
type="URLRewriter.RewriterFactoryHandler,URLRewriter"/>
</httpHandlers>
个中
<sectionname="RewriterConfig"
type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/>
</configSections>
用于指定设置节"RewriterConfig"的处置程序类的称号为”URLRewriter.Config.RewriterConfigSerializerSectionHandler”,该类存在于bin目次下的URLRewriter.dll文件中
设置节"RewriterConfig"内容以下
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
个中关头的是这两句
<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。如许就起到了埋没实在文件名,并便于用户影象的感化。

2.处置回发
在重写后的url里假如发生回发,比方有一个按钮,又挪用了该被重写的aspx,用户扫瞄器中将会显现该aspx文件实践的地点,也就是http://hostname/default.aspx?id=11。但从用户的角度思索,如果单击按钮时俄然看到URL变动会使他们感应不安。因而必需办理这个成绩。
办理办法有二:
(1)本人界说一个Actionlessform类,在aspx中不再利用体系供应的form标志
namespaceActionlessForm{
publicclassForm:System.Web.UI.HtmlControls.HtmlForm
{protectedoverridevoidRenderAttributes(HtmlTextWriterwriter)
{
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.NETWeb使用程序中利用它,应起首将其增加到Web使用程序的References文件夹中。然后,要利用它来取代HtmlForm类,做法是在ASP.NET网页的顶部增加以下内容:
<%@RegisterTagPrefix="skm"Namespace="ActionlessForm"
Assembly="ActionlessForm"%>
然后,将<formrunat="server">(假如有)交换为:
<skm:Formid="Form1"method="post"runat="server">
并将右侧的</form>标志交换为:
</skm:Form>
(2)以上的是承继个form,第二种办法就是承继page,如许你不必要在aspx页中改任何器材。
代码:
usingSystem;
usingSystem.IO;
usingSystem.Web;
usingSystem.Web.UI;
namespaceURL
{
publicclassOLPage:Page
{
publicOLPage()
{}
protectedoverridevoidRender(HtmlTextWriterwriter)
{
if(writerisSystem.Web.UI.Html32TextWriter)
{
writer=newFormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer=newFormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}}
internalclassFormFixerHtml32TextWriter:System.Web.UI.Html32TextWriter
{
privatestring_url;//假的URL
internalFormFixerHtml32TextWriter(TextWriterwriter):base(writer)
{
_url=HttpContext.Current.Request.RawUrl;
}
publicoverridevoidWriteAttribute(stringname,stringvalue,boolencode)
{
if(_url!=null&&string.Compare(name,"action",true)==0)
{
value=_url;
}
base.WriteAttribute(name,value,encode);
}
}
internalclassFormFixerHtmlTextWriter:System.Web.UI.HtmlTextWriter
{
privatestring_url;
internalFormFixerHtmlTextWriter(TextWriterwriter):base(writer)
{
_url=HttpContext.Current.Request.RawUrl;
}
publicoverridevoidWriteAttribute(stringname,stringvalue,boolencode)
{
if(_url!=null&&string.Compare(name,"action",true)==0)
{
value=_url;
}
base.WriteAttribute(name,value,encode);
}}}
把这个文件编译成dll,并在你的项目中援用它。
然后把项目中的一切aspx文件对应的cs文件中的承继page类的代码改写为承继OLPage。
比方
publicclassWebForm1:page
改写为
publicclassWebForm1:URL.OLPage
如许就办理回提问题。

在VC.net的版本上,为了让C++运行在.NETFramework中,微软为C++引进了托管,就是托管C++(ManagedC++),这个根本就没有流行起来,自托管C++产生以后就没有收到过好评。
作者: 柔情似水    时间: 2015-1-19 10:47
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
作者: 愤怒的大鸟    时间: 2015-1-28 06:08
网页从开始简单的hmtl到复杂的服务语言,走过了10多个年头,各种技术层出不穷,单个的主流技术也在不断翻新的版本,现在分析下各种语言的区别、优势、劣势、开发注意事项!
作者: 精灵巫婆    时间: 2015-2-5 19:09
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
作者: admin    时间: 2015-2-13 06:55
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
作者: 再见西城    时间: 2015-3-11 12:49
使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
作者: 小妖女    时间: 2015-3-18 19:40
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。
作者: 乐观    时间: 2015-3-26 14:42
ASP.Net和ASP的最大区别在于编程思维的转换,而不仅仅在于功能的增强。ASP使用VBS/JS这样的脚本语言混合html来编程,而那些脚本语言属于弱类型、面向结构的编程语言,而非面向对象。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2