ASP.NET 2.0 URL映射技巧

有一条长长的石头,外形像一条龙,石头上长满斑斑点点的东西,像龙身上的鳞。人生就是一场旅行,不在乎目的地,在乎的应该是沿途的风景以及看风景的心情。春色满园关不住,一枝红杏出墙来。
在项目中经常要进行如下映射

http://onewww.net/a.aspx?name=llinzzi
映射到
http://onewww.net/llinzzi
首先要解决2个问题
第一是支持通配符的映射URL映射是asp.net2.0新增的功能,不支持通配符
于是采用了NBEAR的NBear.Web.Modules.UrlRewriteRules进行通配符映射
<?xmlversion="1.0"?>
<!--
注意:除了手动编辑此文件以外,您还可以使用
Web管理工具来配置应用程序的设置。可以使用VisualStudio中的
“网站”->“Asp.Net配置”选项。
设置和注释的完整列表在
machine.config.comments中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config中
-->
<configurationxmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<sectionname="UrlRewriteRules"type="NBear.Web.Modules.UrlRewriteRules,NBear.Web"/>
</configSections>
<UrlRewriteRules>
<Rulekey="/(.*)/"value="/a.aspx?name=$1"/>
<Rulekey="/(.*)"value="/a.aspx?name=$1"/>
</UrlRewriteRules> <appSettings/>
<system.web> <sessionStatetimeout="200"/>
<httpModules>
<addtype="NBear.Web.Modules.UrlRewriteModule,NBear.Web"name="UrlRewriteModule"/>
</httpModules> <!--
设置compilationdebug="true"将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为true。
-->
<compilationdebug="true"defaultLanguage="c#"/>
<!--
通过<authentication>节可以配置ASP.NET使用的
安全身份验证模式,
以标识传入的用户。
-->
<authenticationmode="Windows"/>
<!--
如果在执行请求的过程中出现未处理的错误,
则通过<customErrors>节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置
要显示的html错误页
以代替错误堆栈跟踪。 <customErrorsmode="RemoteOnly"defaultRedirect="GenericErrorPage.htm">
<errorstatusCode="403"redirect="NoAccess.htm"/>
<errorstatusCode="404"redirect="FileNotFound.htm"/>
</customErrors>
-->
</system.web>
</configuration> vs2005里进行测试成功,但放到IIS里失败 检查了几次,没发现问题,仔细想了想 先了下,iis的工作流程应该是遇到.aspx扩展名,交给.net处理,然后才能调用httpModules进行url映射
http://onewww.net/llinzzi
没有aspx扩展名,所以iis直接当成文件架,返回404错误了
而vs2005里的调试web服务器把所有的请求都发给了.net处理,所以成功.
于是更改映为
<Rulekey="/(.*)/index.aspx"value="/a.aspx?name=$1"/>
浏览
http://onewww.net/llinzzi/index.aspx
测试成功.
开心,把index.aspx设置成默认文档
测试http://onewww.net/llinzzi/结果还是404错误
想了下iis认为llinzzi文件夹不存在,自然就没用默认文档去访问 郁闷,想了很多方法,均失败
难道要用llinzzi/index.html访问?难道要生成真是存在的文件夹?
都不是理想的方案 在尝试从iis里的主目录里的配置里修改isapi来实现用文件夹对iis的解析的时候,突然发现windows2003服务器上的iis6对比我工作机xp上的iis5多了一个名为
通配符应用程序映射的设置,眼睛一亮..有戏,第一名字听起来有门,第二2003本来就是为.net打造的.于是点插入,
输入c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll
测试,成功! 搜索了下关于通配符应用程序映射的资料 安装通配符应用程序映射
在IIS6.0中,管理员可以在每次开始对网站或虚拟目录发送请求时,将该网站或虚拟目录配置为运行Internet服务器API(ISAPI),而不管所请求文件的扩展名。 当IISWeb服务器接受到来自客户端的请求时,Web服务器会查看在请求中命名的文件扩展名,以确定有哪一个ISAPI或公共网关接口(CGI)应用程序来处理该文件。例如,如果请求名为Default.asp的网页时,IIS可以从应用程序映射列表中知道Default.asp由Asp.dllISAPI应用程序处理。 如果想在所请求的页面发送到映射的应用程序前对每次客户端请求执行特定的任务,可以编写一个ISAPI筛选器在请求到达时将其截获。但是,ISAPI筛选器具有以下限制: 它们不能访问请求主体,而只访问头。
它们只能在每个站点配置,而不能在每个虚拟目录配置。
它们不应包含长期运行的操作,因为ISAPI筛选器是同步进行的。
它们的灵活性较小,因为ISAPI筛选器API的功能比ISAPI扩展API少,后者用于编写ISAPI应用程序。
它们在时间上难以管理。
它们是事件驱动的。 通过使用通配符应用程序映射,您可以在所请求的页面发送到其映射应用程序之前截获每个请求。其效果就像拥有处理每个文件名扩展的应用程序映射。这就是使用“通配符”来命名这一功能的原因。使用通配符应用程序映射的应用程序只能是ISAPI应用程序。 客户端请求采用以下路由: 传入的请求由安装在根网站上的任何现有的ISAPI筛选器处理。ISAPI筛选器依次执行。
请求被发送到任何现有的通配符应用程序映射的应用程序,这些程序也是依次执行的。如果传入的请求是对虚拟目录中的Web文件进行请求的,且通配符应用程序映射已安装在了该虚拟目录和根网站上,那么只有安装在该虚拟目录的通配符应用程序映射才被执行。如果该虚拟目录上没有安装通配符应用程序映射,则将执行安装在网站上的通配符应用程序映射。换句话说,通配符应用程序映射只在所请求的Web文件所处的应用程序中不存在映射时才会被继承。
IIS服务器会查看应用程序映射表,以确定由哪个ISAPI应用程序或CGI脚本专门处理所请求的文件。
每个阶段都可以附加响应,然后传回给客户端。
使用通配符应用程序映射
通配符应用程序映射可以在以下方案中使用: 高安全性Web应用程序(如银行业应用程序)要求对每个提出请求的用户根据用户名、密码和帐户号数据库进行身份验证。例如,一旦用户通过了身份验证,将会创建规定用户可以访问哪些信息的特定规则。如果通配符应用程序映射确定用户不具有相应权利,它可以阻止请求的进一步访问,或将请求发送到所请求的网页以外的网页。这种自定义的身份验证和授权方案可以在ISAPI应用程序中执行,并安装为通配符应用程序映射。这样,所有用户必须通过身份验证,不考虑他们所请求的文件的扩展名。
针对单个用户的广告电子商务网站。例如,当返回用户所提出的请求时,通配符应用程序映射应用程序将检查他们的身份,然后查询他们以前已观看或购买的项目。一旦通配符脚本映射将控制传送到被请求的页面,就可以显示适合该用户的广告。
要点您必须是本地计算机上Administrators组的成员或者必须被委派了相应的权限,才能执行下列步骤。作为安全性的最佳操作,请使用不属于Administrators组的帐户登录计算机,然后使用运行方式命令以管理员身份运行IIS管理器。在命令提示符下,键入runas/user:administrative_accountname"mmc%systemroot%\system32\inetsrv\iis.msc"。 将通配符应用程序映射添加到Web服务器或网站 在IIS管理器中,展开本地计算机,展开“网站”文件夹,右键单击所需的网站或虚拟目录,然后单击“属性”。
单击相应的选项卡:“主目录”、“虚拟目录”、或“目录”。
在“应用程序设置”区域中,单击“配置”,然后单击“映射”选项卡。
要安装通配符应用程序映射,请进行以下操作:
在“映射”选项卡上,单击“插入”。
在“可执行文件”文本框中键入DLL的路径或单击“浏览”以找到该文件,如果该DLL文件是脚本引擎,选择“应用程序引擎”复选框,然后单击“确定”。
要编辑或删除通配符应用程序映射,请进行以下操作:
在“应用程序扩展”列表中,单击想更改的脚本映射。
单击“编辑”更改脚本映射,或单击“删除”删除脚本映射。
要更改通配符应用程序执行的顺序,在“通配符应用程序映射(执行顺序)”框中重新安排通配符应用程序映射,其方法是单击“上移”或“下移”按钮直到符合您想要的顺序为止。
注意请不要在通配符应用程序映射列表中多次列出同一应用程序。

到此这篇关于ASP.NET 2.0 URL映射技巧就介绍到这了。一个人有生就有死,但只要你活着,就要以最好的方式活下去。更多相关ASP.NET 2.0 URL映射技巧内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

标签: NET ASP