仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1136|回复: 8
打印 上一主题 下一主题

[学习教程] ASP.NET网页编程之ASP.NET 中实行 URL 重写

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:36:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
有专家说: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的,我实在想不透这句话的含义,难道执行速度不就是效率低吗?难道执行速度慢还成效率高了?
沙发
发表于 2015-1-19 18:04:24 | 只看该作者
通过这次激烈的讨论,我从大家身上学到了太多,开阔了眼界,不管是支持我的还是骂我的,都感谢你们。
小魔女 该用户已被删除
板凳
发表于 2015-1-27 05:16:11 | 只看该作者
它可通过内置的组件实现更强大的功能,如使用A-DO可以轻松地访问数据库。
蒙在股里 该用户已被删除
地板
发表于 2015-2-5 01:02:22 | 只看该作者
那么,ASP.Net有哪些改进呢?
admin 该用户已被删除
5#
发表于 2015-2-11 00:25:36 | 只看该作者
ASP.net的服务器,要求安装一个.net环境,当然我这里指的是windows系统,顺便点一下,.net只能放在windows环境里来运行。Asp.net1.1的就装Framework1.1,Asp.net2.0的就装Framework2.0。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-3-1 19:08:18 | 只看该作者
在一个项目中谁敢保证每天几千万甚至几亿条的数据不丢失?谁敢保证应用的高可靠性?有可以借签的项目吗?
柔情似水 该用户已被删除
7#
发表于 2015-3-10 22:13:12 | 只看该作者
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
海妖 该用户已被删除
8#
发表于 2015-3-17 11:10:57 | 只看该作者
现在主流的网站开发语言无外乎asp、php、asp.net、jsp等。
深爱那片海 该用户已被删除
9#
发表于 2015-3-24 08:52:52 | 只看该作者
同时也感谢博客园给我们这个平台,也感谢博客园的编辑们做成专题引来这么多高人指点。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 17:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表