ASP.NET网页编程之ASP.NET 中实行 URL 重写
有专家说:java不是跨平台,java就是平台,这很好的定义了java的特点。有了java,你只需要等待java平台在新平台上移植。这还不错吧!只是,java不是一个平台,而是多个平台。你需要在这个java平台移植到另一个java平台。asp.net|实行URL重写就是把URL地点从头改写概况:http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
长处:把url延长等
用法:1.下载ms的URLRewrite.dll,放到你的bin下
2.在web.config里设置以下:
<?xmlversion="1.0"encoding="utf-8"?>
<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>
然后在cs里写:
privatevoidPage_Load(objectsender,System.EventArgse)
{
//在此处安排用户代码以初始化页面
Response.Write(Request.QueryString["id"]+"<BR>");
Response.Write("haha");
}
只需输出
localhost/overred/d123.aspx(注重:开首必需为d,后为数字)
实在这个d123.aspx是假造的,并非实践存在的。只需切合格局就行。
他就会跳到http://localhost/overred/default.aspx
并且他在default里能够捕获一些参数好比id,就是你的d后的数字(后必需为数字),如许你就能够显现id为123的文章。
在重写后的url里假如发生回发将会传送到d123.aspx,如许用户在点button时会看到哪一个实践的地点,msdn上说的:但从用户的角度思索,假如单击按钮时俄然看到URL变动会使他们感应不安。
可见ms把客户捧为他的天主!(真的?#¥%……―*)
持续援用ms:
呈现这类情形的缘故原由是:在出现Web窗体时,它会将其操纵属性间接设置为Request工具中文件路径的值。固然,在出现Web窗体时,URL已从/Products/Beverages.aspx重写为ListProductsByCategory.aspx?CategoryID=1,这标明Request工具呈报用户要会见ListProductsByCategory.aspx?CategoryID=1。只需使服务器端窗体不出现操纵属性便可办理此成绩。(默许情形下,假如窗体不包括操纵属性,扫瞄器将会回发。)
不幸的是,Web窗体不同意您明白指定操纵属性,也不同意您设置某些属性以禁用操纵属性的出现。因而,我们必需本人来扩大System.Web.HtmlControls.HtmlForm类,掩盖RenderAttribute()办法并明白指出它不会出现操纵属性。
因为承继功效,我们能够取得HtmlForm类的一切功效,而且只需增加几行代码便可取得所需的举动。以下显现了自界说类的完全代码:
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);
}
}
}
已被掩盖的RenderAttributes()办法的代码仅包括HtmlForm类的RenderAttributes()办法的正确代码,而不设置操纵属性。(我利用LutzRoeder的Reflector来检察HtmlForm类的源代码。)
创立此类并对其举行编译以后,要在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>
以上的是承继个form,实在另有更复杂的,就是承继page,如许你不必要在aspx页中改任何器材。
代码:
usingSystem;
usingSystem.IO;
usingSystem.Web;
usingSystem.Web.UI;
namespaceURl
{
/**////<summary>
///页面基类www.ckuyun.com
///</summary>
publicclassOLPage:Page
{
publicOLPage()
{
}
/**////<summary>
///重写默许的HtmlTextWriter办法,修正form标志中的value属性,使其值为重写的URL而不是实在URL。
///</summary>
///<paramname="writer"></param>
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)
{
//假如以后输入的属性为form标志的action属性,则将其值交换为重写后的子虚URL
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,今后只需增加援用就能够拉!
ok,itissoeasy!我有个同学,他是搞Java的,他给我说“Java不是效率低,而是速度慢。”,我不是搞Java的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了? 通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。 它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。 那么,ASP.Net有哪些改进呢? ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。 在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗? 如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。 现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。 同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
页:
[1]