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 进行通配符映射

<?xml version="1.0"?>
<!-- 
    注意: 除了手动编辑此文件以外,您还可以使用 
    Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
     “网站”->“Asp.Net 配置”选项。
    设置和注释的完整列表在 
    machine.config.comments 中,该文件通常位于 
    \Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <configSections>
    <section name="UrlRewriteRules" type="NBear.Web.Modules.UrlRewriteRules, NBear.Web"/>
  </configSections>
  <UrlRewriteRules>
    <Rule key="/(.*)/" value="/a.aspx?name=$1" />
    <Rule key="/(.*)" value="/a.aspx?name=$1" />
  </UrlRewriteRules>  

  <appSettings/>

  <system.web>

    <sessionState timeout="200" />
    <httpModules>
      <add type="NBear.Web.Modules.UrlRewriteModule, NBear.Web" name="UrlRewriteModule"/>
    </httpModules>

    <!-- 
            设置 compilation debug="true" 将调试符号插入
            已编译的页面中。但由于这会 
            影响性能,因此只在开发过程中将此值 
            设置为 true。
        -->
        <compilation debug="true" defaultLanguage="c#" />
        <!--
            通过 <authentication> 节可以配置 ASP.NET 使用的 
            安全身份验证模式,
            以标识传入的用户。 
        -->
        <authentication mode="Windows"/>
        <!--
            如果在执行请求的过程中出现未处理的错误,
            则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
            开发人员通过该节可以配置
            要显示的 html 错误页
            以代替错误堆栈跟踪。

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="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处理,所以成功.
于是更改映为
  <Rule key="/(.*)/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 
测试,成功!

搜索了下关于 通配符应用程序映射 的资料

安装通配符应用程序映射
在 IIS 6.0 中,管理员可以在每次开始对网站或虚拟目录发送请求时,将该网站或虚拟目录配置为运行 Internet 服务器 API (ISAPI),而不管所请求文件的扩展名。

当 IIS Web 服务器接受到来自客户端的请求时,Web 服务器会查看在请求中命名的文件扩展名,以确定有哪一个 ISAPI 或公共网关接口 (CGI) 应用程序来处理该文件。例如,如果请求名为 Default.asp 的网页时,IIS 可以从应用程序映射列表中知道 Default.asp 由 Asp.dll ISAPI 应用程序处理。

如果想在所请求的页面发送到映射的应用程序前对每次客户端请求执行特定的任务,可以编写一个 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 文件是脚本引擎,选择“应用程序引擎”复选框,然后单击“确定”。 
要编辑或删除通配符应用程序映射,请进行以下操作: 
在“应用程序扩展”列表中,单击想更改的脚本映射。 
单击“编辑”更改脚本映射,或单击“删除”删除脚本映射。 
要更改通配符应用程序执行的顺序,在“通配符应用程序映射(执行顺序)”框中重新安排通配符应用程序映射,其方法是单击“上移”或“下移”按钮直到符合您想要的顺序为止。 
 注意 请不要在通配符应用程序映射列表中多次列出同一应用程序。

时间: 2024-09-08 22:55:49

ASP.NET 2.0 URL映射技巧_实用技巧的相关文章

在ASP.NET中重写URL的代码_实用技巧

经常有人请我指导应该如何动态地"重写"URL,以在他们的ASP.NETweb应用中发布比较干净的URL端点.这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的结构.  为什么URL映射和重写很重要? 下面是开发人员想要对URL有更大的灵活性的最常见的场景:  1) 处理这样的情形:你要更改你的web应用中网页的结构,但你同时也要确保在你移动网页后,那些被人收藏的老URL不会成为死链接.重写URL允许你透明地将请求转交到新

FreeTextBox(版本3.1.6)在ASP.Net 2.0中使用方法_实用技巧

1.下载最新版FreeTextBox(版本3.1.6),解压 FreeTextBox 3.1.6 (2007/10/17) 作者网站下载地址:http://freetextbox.com/download/ 详细版本有哪些改进和修改历史可以看这里:http://freetextbox.com/download/changelog.aspx FreeTextBox 3.1.6 (2006/07/18) * BUG: Firefox postback problems (due to IE spec

ASP.NET 2.0下的条件编译_实用技巧

在Web开发中测试单个页面的功能实在是太麻烦,从首页用户名.密码进去后,经过一些操作后才可以来到你要测试的那个页面.(其实无论做什么的开发,测试单个功能都是很麻烦).抱着小心谨慎的态度,我一般喜欢写几段测一次,如果每次都兴师动众的启动整个项目来测试显然是很不经济的做法. 我一般会在Solution中新增一个用于测试用的配置,在其中增加一个"Test"之类的编译指令,然后在代码中,把一些测试条件,测试方法放到这个指令下.在开发团队还没有引进单元测试之类的概念的时候,我可不想用新增一个测试

在 .NET Framework 2.0 中未处理的异常导致基于 ASP.NET 的应用程序意外退出_实用技巧

但是,系统日志中可能会记录类似于以下内容的事件消息: 事件类型:警告 事件来源:W3SVC 事件类别:无 事件 ID: 1009 日期: 9/28/2005 时间:3:18:11 PM 用户:N/A 计算机:IIS-SERVER 描述: 为应用程序池"DefaultAppPool"提供服务的进程意外终止.进程 ID 是"2548".进程退出代码是"0xe0434f4d". 而且,应用程序日志中可能会记录类似于以下内容的事件消息: 事件类型:错误

ASP.NET2.0新特性概述_实用技巧

ASP.NET技术从1.0版本升级到1.1变化不是很大.然而,从ASP.NET 1.x升级到2.0,却不是件轻而易举的事情.ASP.NET 2.0技术增加了大量方便.实用的新特性.ASP.NET 2.0主要提供控件.页面框架.服务与APIs等3个方面的技术特性.       控件 在ASP.NET 1.x时代,由于内置服务器控件数量有限.功能覆盖面窄,因此,开发人员怨声载道.为了消除这个技术软肋,ASP.NET 2.0做出了突破性改进.在ASP.NET 2.0中,新增数十个服务器控件.根据控件功

Asp.net调试的一些问题小结_实用技巧

昨天到今天搞了一整天,把人都要差点搞崩了! ,以后再也不能乱关机了,因为这次的大意,几乎所有的Net安装,调试问题都被我碰到了,还好,我一个个把他记录下来了,同时,在CSDN找了一些相关的解决方法,不敢独享,供大家相互学习交流之用. 起因是这样的,机子运行IE时假死,我用着不爽,就二话不说热启动,结果就出事了. 重新打开正在Vs2003.Net里面正在作的项目时,老半天没反应,机子变得异常慢,当然,出于职业的敏感,马上来了个Ctrl+Alt+Del,这下不好,CPU占用100%,一直高居不下,运

asp.net保存远程图片的代码_实用技巧

注意:并没有实现CSS中的图片采集,且图片的正则还有待完善. 复制代码 代码如下: using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using

asp.net文件上传示例分享_实用技巧

方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: 复制代码 代码如下: <form id="form1" runat="server"><asp:FileUpload ID="FileUpload1" runat="server" /><asp:Button ID="Button1" runat="server" T

asp.net 文件上传实例汇总_实用技巧

ASP.NET依托.net framework类库,封装了大量的功能,使得上传文件非常简单,主要有以下三种基本方法. 方法一:用Web控件FileUpload,上传到网站根目录. Test.aspx关键代码: 复制代码 代码如下:      <form id="form1" runat="server">     <asp:FileUpload ID="FileUpload1" runat="server"