你的位置:睿鑫网络 >> 编程 >> web开发 >> ASP.NET >> 详细内容 在线投稿

在ASP.NET中执行URL重写经典方案

排行榜 收藏 打印 发给朋友 举报 来源: 网络   发布者:未知
热度13票  浏览19次 时间:2010年1月15日 10:55

s|/t/aoPxj0摘要:介绍如何使用 Microsoft ASP.NET 执行动态 URL 重写。URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。讨论实现 URL 重写的各种技术,并介绍执行 URL 重写的一些实际情况。睿鑫网络a%sx'y8}uwg Q r1W"m

睿鑫网络3vf3z7]*aR]-tY1S&L

引言睿鑫网络w[m"M9h&v"nn

睿鑫网络 a%BeJg5{LC i fL

让我们花点时间来看一下网站上的一些 URL。您是否发现一些类似于 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 的 URL?或者,您可能将一系列网页从一个目录或网站移动到另一个目录或网站,结果导致已将旧 URL 用作书签的访问者断开链接。在本文中,我们将了解如何通过将 http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary 替换为类似于 http://yoursite.com/people/sales/chuck.smith 的网址,使用 URL 重写将那些冗长的 URL 缩写为富有意义且容易记忆的 URL。我们还将了解如何将 URL 重写用于创建智能 404 错误。

8@4F B_`9l"J/U%G0

Vdr a h+mU0URL 重写是截取传入 Web 请求并自动将请求重定向到其他资源的过程。执行 URL 重写时,通常会检查被请求的 URL,并基于 URL 的值将请求重定向到其他 URL。例如,在进行网站重组而将 /people/ 目录下的所有网页移动到 /info/employees/ 目录中时,您可能希望使用 URL 重写来检查 Web 请求是否指向了 /people/ 目录中的文件。如果请求指向 /people/ 目录中的文件,您可能希望自动将请求重定向到 /info/employees/ 目录中的同一文件。睿鑫网络X}#kN:S0G

睿鑫网络^U a U1M8v%a

使用传统的 ASP,应用 URL 重写的唯一方法是编写 ISAPI 筛选器,或者购买提供 URL 重写功能的第三方产品。但是,使用 Microsoft® ASP.NET,您可以通过很多方法来轻松地创建您自己的 URL 重写软件。本文讨论了可供 ASP.NET 开发人员实现 URL 重写的各种技术,然后讨论了 URL 重写的一些实际使用情况。在深入讨论 URL 重写的技术细节之前,让我们先看一些可以使用 URL 重写的日常情景。

(C6CU2C{B\0 睿鑫网络7xA&R*Id?L

URL 重写的常见用法睿鑫网络L6G s l;m6p

5X+Q W9z_:a0创建数据驱动的 ASP.NET 网站时,通常会产生一个单个的网页,该网页基于查询字符串参数显示数据库数据的子集。例如,在设计电子商务站点时,您的任务之一便是允许用户浏览待售产品。为此,您可以创建一个名为 displayCategory.aspx 的页面,该页面将显示给定类别的产品。可以通过查询字符串参数来指定要查看的该类别的产品。也就是说,如果用户要浏览待售的 Widget 产品,并且所有 Widget 产品的 CategoryID 均为 5,则用户可以访问以下网址:http://yousite.com/displayCategory.aspx?CategoryID=5。

m r:pF*X0 睿鑫网络-S @A/`0L,L%@ i'Cq&S

创建具有此类 URL 的网站有两点不足:首先,从最终用户的角度考虑,URL http://yousite.com/displayCategory.aspx?CategoryID=5 比较杂乱。可用性专家 Jakob Neilsen建议遵循以下标准来选择 URL:

H H$HZ0o$TG0 睿鑫网络p*lL3\|

睿鑫网络d5[5J(B c+JTGX#N"h

睿鑫网络Oqa#o&YDV-j T'S

简短。睿鑫网络djSS:_/H];r1\y

睿鑫网络2Y g&a.i9D dU}$BR

g/O)QT'k"gv0

n4B1?nuN;pa0易于键入。

;I]e"XRi&g/M0

-Mf,P1MOo0睿鑫网络1BU:Y"U }I3x[H

*C.E.o`8rU0可以看出站点的结构。

Qy+]Mr(Qp6SD+M0

[7gu QFAX5vi0睿鑫网络$J_*i5mq l [4[ Yy

o)r1E3[~0“可删节”,允许用户通过删除 URL 的组成部分来浏览站点。睿鑫网络c I O*}0jN

睿鑫网络 c6ee1w2k.c[f

我还要增加一条标准,即,URL 应该便于记忆。URL http://yousite.com/displayCategory.aspx?CategoryID=5 不符合 Neilsen 的任何标准,也不容易记住。要求用户键入查询字符串值将使 URL 的键入变得非常困难,并且只有了解查询字符串参数的用途及其名称/值对结构的富有经验的 Web 开发人员才能够对 URL 进行“删节”。睿鑫网络P+R c C ^Y-U!I

睿鑫网络-xI sO7\2Q|

较好的方法是允许使用切合实际且容易记忆的 URL,如 http://yoursite.com/products/Widgets。只要看一眼 URL,您便可以推断出将要显示的内容 -- 有关 Widget 的信息。此 URL 也很容易记住和共享。我可以告诉我的同事“请查看 yoursite.com/products/Widgets,”,她可能无需再次问我 URL 是什么即可打开该页面。(尝试一下,您只需说出“Amazon.com 页面”即可!)此 URL 还将显示出来,并且应该是“可删节”的。也就是说,如果用户删去 URL 的末端,键入 http://yoursite.com/products,他们应该看到所有产品的列表,或者至少应该看到他们可以查看的所有类别的产品列表。睿鑫网络iErk`

睿鑫网络8f4{W0~ D

注意:要获得“可删节”URL 的最好示例,可考虑使用由许多 blog 引擎生成的 URL。要查看 2004 年 1 月 28 日的帖子,用户可以访问诸如 http://someblog.com/2004/01/28 的 URL。如果该 URL 被删节为 http://someblog.com/2004/01,用户将看到 2004 年 1 月的所有帖子。将该 URL 进一步删节为 http://someblog.com/2004 将显示 2004 年的所有帖子。

S+BP2]9H0 睿鑫网络'E_A+d/\.iu+N

除了简化 URL 之外,URL 重写还经常用于处理网站重组,以免导致大量链接断开或书签过期。睿鑫网络*P3H$r2v!^4[3{1\yZ

睿鑫网络O"P{lnq$D K

请求到达 IIS 时将会发生什么情况睿鑫网络vL0ZN4h

eh2bznL.m$v9e0在正式研究 URL 如何实现重写之前,应首先了解 Microsoft® Internet Information Services (IIS) 如何处理传入请求,这一点非常重要。当请求到达 IIS Web 服务器时,IIS 检查被请求文件的扩展名以确定如何处理该请求。IIS 可以自行处理请求(如 HTML 页面、图像以及其他静态内容),或者将请求路由到 ISAPI 扩展。(ISAPI 扩展是一个处理传入 Web 请求的非托管编译类。其任务是生成被请求资源的内容。)睿鑫网络 p*ae4y;v%qz)Z

睿鑫网络w3r'NfD,zv&C1v[

例如,当传入针对 Info.asp 网页的请求时,IIS 会将此消息路由到 asp.dll ISAPI 扩展。然后,该 ISAPI 扩展将加载被请求的 ASP 页面,执行该页面,并将所呈现的 HTML 返回给 IIS,然后,IIS 将该 HTML 发送回请求客户端。对于 ASP.NET 页面,IIS 会将此消息路由到 aspnet_isapi.dll ISAPI 扩展。然后,aspnet_isapi.dll ISAPI 扩展将处理操作传递给托管的 ASP.NET 辅助进程,该辅助程序将处理请求,并返回 ASP.NET 网页的呈现 HTML。

K5{ qRl0wExr0 睿鑫网络5yU;_:~VC

您可以自定义 IIS,以指定扩展名与 ISAPI 扩展的映射关系。图 1 显示了 Internet Information Services 管理工具的“应用程序配置”对话框。请注意,与 ASP.NET 有关的扩展名(.aspx、ascx、config、asmx、rem、cs、vb 及其他)均已映射到 aspnet_isapi.dll ISAPI 扩展。睿鑫网络x&l7T,L[g`#Z3zY$|/`

睿鑫网络;F/{-s'Y.A5k"\

睿鑫网络 C'Fg,_:N8~(nf4K

睿鑫网络NfS v)F B/V

图 1. 已配置的文件扩展名映射睿鑫网络)PK%NUW db

/B@0sq$k},z0讨论 IIS 如何管理传入请求稍稍超出了本文范围。但是可以在 Michele Leroux Bustamante 的文章 Inside IIS and ASP.NET 中找到对此内容的深入讨论。ASP.NET 引擎仅处理那些扩展名已明确映射至 IIS 中的 aspnet_isapi.dll 的传入 Web 请求,了解这一点非常重要。

9}%@^ Ak_*W8ID qo0 睿鑫网络p5EskB1^|

使用 ISAPI 筛选器检查请求

2R aVxa0

p\yPt6tX0IIS 除了可以将传入 Web 请求的文件扩展名映射到相应的 ISAPI 扩展之外,还将执行许多其他任务。例如,IIS 将尝试对发出请求的用户进行身份验证,并确定通过身份验证的用户是否有权限访问被请求的文件。在处理请求的有效期内,IIS 将经历几个状态。在每个状态下,IIS 都将引发可以使用 ISAPI 筛选器以编程方式进行处理的事件。睿鑫网络uf*C:uc`

%B/p&xOfh0Y(]\0与 ISAPI 扩展一样,ISAPI 筛选器是在 Web 服务器上安装的非托管代码块。ISAPI 扩展被设计为可以响应针对特定文件类型的请求。另一方面,ISAPI 筛选器还包含可以对 IIS 引发的事件进行响应的代码。ISAPI 筛选器可以截取甚至修改传入和传出的数据。ISAPI 筛选器可以应用于很多方面,包括:

L2ub2k A%Z Ub0

V,xfsEL/O!M0

V{EG*H7s5{&y0

T0D"R O-czt _i0身份验证和授权。

;e g'Y@W.eG/?-f/N\0 睿鑫网络 W7wi#m"k`7J

jD:~ w@-f_ L/lw0

e*brLg4V&e"]8o0记录和监视。

;N*m6Cn[ [ q0

n1H"m}8F1i0

~ Q L\*Ml^ d0 睿鑫网络$VCQ%Ag~

HTTP 压缩。

cq0ExY+P0

9d)N:R0}4~ _0睿鑫网络4^5L4d,aH`

*G3PtGG N^6W,hivM0URL 重写。睿鑫网络4k1yV)g#bCW,U_|

5v d w*g,VM|7t0虽然 ISAPI 筛选器可用于执行 URL 重写,但本文将讨论如何使用 ASP.NET 实现 URL 重写。不过,我们将对使用 ISAPI 筛选器与使用 ASP.NET 中的技术实现 URL 重写进行权衡。睿鑫网络V*bGb.x

,hJ'P!]VB'h0请求进入 ASP.NET 引擎时将会发生什么情况

4hZ } XK"U'|0f9U0 睿鑫网络OW%V6`h(Kwl"a

在 ASP.NET 之前,需要使用 ISAPI 筛选器来实现 IIS Web 服务器上的 URL 重写。由于 ASP.NET 引擎与 IIS 非常相似,因此可以使用 ASP.NET 进行 URL 重写。存在相似之处的原因在于 ASP.NET 引擎可以实现以下功能:

LH$e]~w3z7@Jq0 睿鑫网络.F ^0W$U @$Ucpea

睿鑫网络;j w2wg.F A F| P*?-H

睿鑫网络 @T5D/_G;nM

在处理请求时可以引发事件。睿鑫网络XZq'y!YO}

睿鑫网络'[0ABQ m_MB

睿鑫网络*b9\Lwt^

睿鑫网络 D4_D.P\

允许任意数量的 HTTP 模块处理所引发的事件,这与 IIS 的 ISAPI 筛选器相似。

%G:T^)Jpj\0 睿鑫网络 V D#d e)ou

睿鑫网络)eJ.k#Tc,lKQ&G9q

J0Bjb r Uw*asj0将呈现被请求资源这项任务委托给 HTTP 处理程序,该处理程序与 IIS 的 ISAPI 扩展相似。睿鑫网络K'EB(m&T$r7~i H

上一篇 下一篇

网络资源