夜鹰教程网-程序员的加油站
 当前位置:文章中心 >> Asp.net专题(WCF/WPF/WF)
ASP.NET中的URL映射技巧
夜鹰教程网 来源:www.yyjcw.com 日期:2016-11-24 13:15:08
ASP.NET中的URL映射技巧

在项目中经常要进行如下映射

http://yyjcw.com/a.aspx?name=llinzzi
映射到
http://yyjcw.com/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://yyjcw.com/llinzzi
没有aspx扩展名,所以iis直接当成文件架,返回404错误了
而vs2005里的调试web服务器把所有的请求都发给了.net处理,所以成功.
于是更改映为
  <Rule key="/(.*)/index.aspx" value="/a.aspx?name=$1" />
浏览
http://yyjcw.com/llinzzi/index.aspx
测试成功.
开心,把index.aspx设置成默认文档
测试http://yyjcw.com/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 文件是脚本引擎,选择“应用程序引擎”复选框,然后单击“确定”。
要编辑或删除通配符应用程序映射,请进行以下操作:
在“应用程序扩展”列表中,单击想更改的脚本映射。
单击“编辑”更改脚本映射,或单击“删除”删除脚本映射。
要更改通配符应用程序执行的顺序,在“通配符应用程序映射(执行顺序)”框中重新安排通配符应用程序映射,其方法是单击“上移”或“下移”按钮直到符合您想要的顺序为止。
 注意 请不要在通配符应用程序映射列表中多次列出同一应用程序。

复制链接 网友评论 收藏本文 关闭此页
上一条: .Net如何做数字签名  下一条: 26个性能优化方法ASP.NET 版
夜鹰教程网成立于2008年,目前已经运营了将近 13 年,发布了大量关于 html5/css3/C#/asp.net/java/python/nodejs/mongodb/sql server/android/javascript/mysql/mvc/easyui/vue/echarts原创教程。 我们一直都在坚持的是:认证负责、一丝不苟、以工匠的精神来打磨每一套教程,让读者感受到作者的用心。我们默默投入的时间,确保每一套教程都是一件作品,而不是呆板的文字和视频! 目前我们推出在线辅导班试运营,模式为一对一辅导,教学工具为QQ。我们的辅导学科包括 java 、android原生开发、webapp开发、商城开发、C#和asp.net开发,winform和物联网开发、web前端开发,但不仅限于此。 普通班针对的是国内学员,例如想打好基础的大学生、想转行的有志青年、想深入学习的程序员、想开发软件的初学者或者业余爱好者等。 就业办针对即将毕业上岗的大四学生,或者打算转行的初级开发工程师。 留学生班针对的是在欧美、加拿大、澳洲、日本、韩国、新加坡等地留学的中国学子,目的是让大家熟练地掌握编程技能,按时完成老师布置的作业,并能顺利地通过考试。 详细咨询QQ:1416759661   夜鹰教程网  基于角色的权限管理系统(c-s/b-s)。
  夜鹰教程网  基于nodejs的聊天室开发视频教程
  夜鹰教程网  Git分布式版本管理视频教程
  夜鹰教程网  MVC+EasyUI视频教程
  夜鹰教程网  在线考试系统视频教程
  夜鹰教程网  MongoDB视频教程。
  夜鹰教程网 Canvas视频教程
  夜鹰教程网 报表开发视频教程
  热点推荐
表单提交中get和post方式的区别有…
解决ASP中UTF-8与GB2312编码转换乱…
asp数组中REDIM的用法(动态数组)…
生成html的新方法ASP
ASP字符串函数大全
ASP生成Word文件的代码
ASP中Randomize随机函数的使用
十天学会ASP教程之第一天:安装调…
自定义的asp日期格式化函数
防范ASP网站漏洞的八大法则之一
十天学会ASP教程之第二天:表单传…
asp中关于从utf8页面到gb2312页面…
ASP教程:实现长文章分页功能
IIS6架设网站的问题总结
五分钟打开 allow_url_fopen 的最…
  最近更新
C# Json数据中的特殊字符导致页面…
博客园是有开发博客查询相关的接口…
C#里面的ref和out区别
C#调用API让声卡发出声音
.NET使用反射读取用户自定义的枚举…
.net操作SqlServer数据库增删改查…
如何将WCF服务部署到远程服务器
对WebApi 实现服务端信息的监控
用WCF生成Restful风格的接口返回 …
只有一个地址如何调用WCF服务
WCF简介
搭一个简单的wcf服务
WCF配置说明
WCF传输的数据量过大问题的解决方…
asp.net大文件分块上传文件秒传断…

关于我们 | 网站建设 | 技术辅导 | 常见问题 | 联系我们 | 友情链接

夜鹰教程网 版权所有 www.yyjcw.com All rights reserved 备案号:蜀ICP备08011740号3