关于asp.net:IIS URL重写与URL路由

IIS URL Rewriting vs URL Routing

我打算将URL路由用于Web窗体应用程序。 但是,在阅读了一些帖子之后,我不确定这是否是一种简单的方法。

将URL重写模块用于Web表单是否更好? 但是,仅适用于IIS7。 最初,有些嗡嗡声表明URL路由与Asp.Net MVC完全脱钩,可以用于Web表单。

希望听到任何建议。


这是我找到的关于该主题的最佳文章:Ruslan Yakushev的IIS URL重写和ASP.NET路由。

IIS URL重写

当客户端向Web服务器请求特定URL时,URL重写组件将分析所请求的URL,并将其更改为同一服务器上的其他URL。 URL重写组件在请求处理管道中非常早地运行,因此能够在Web服务器决定使用哪个处理程序来决定请求之前修改请求的URL。

IIS URL Rewriting

ASP.NET路由

ASP.NET路由被实现为托管代码模块,该模块在"解析缓存"阶段(PostResolveRequestCache事件)和"地图处理程序"阶段(PostMapRequestHandler)插入IIS请求处理管道。 ASP.NET路由配置为针对Web应用程序发出的所有请求运行。

IIS URL Routing

URL重写和ASP.NET路由之间的区别:

  • URL重写用于在Web服务器处理请求之前操纵URL路径。 URL重写模块对什么处理器最终将处理重写的URL一无所知。另外,实际的请求处理程序可能不知道URL已被重写。
  • ASP.NET路由用于根据请求的URL路径将请求调度到处理程序。与URL重写相反,路由组件了解处理程序,并选择应为所请求的URL生成响应的处理程序。您可以将ASP.NET路由视为一种高级处理程序映射机制。
  • 除了这些概念上的差异外,IIS URL重写和ASP.NET路由之间还存在一些功能差异:

  • IIS URL重写模块可与任何类型的Web应用程序一起使用,包括ASP.NET,PHP,ASP和静态文件。 ASP.NET路由只能与基于.NET Framework的Web应用程序一起使用。
  • IIS URL重写模块以相同的方式工作,而不管应用程序池是使用集成的还是经典的IIS管道模式。对于ASP.NET路由,最好使用集成管道模式。 ASP.NET路由可以在经典模式下工作,但是在那种情况下,应用程序URL必须包含文件扩展名,或者必须将应用程序配置为在IIS中使用" *"处理程序映射。
  • URL重写模块可以根据域名,HTTP标头和服务器变量做出重写决定。默认情况下,ASP.NET路由仅适用于URL路径和HTTP-Method标头。
  • 除了重写之外,URL重写模块还可以执行HTTP重定向,发出自定义状态代码和中止请求。 ASP.NET路由不会执行这些任务。
  • URL重写模块在当前版本中不可扩展。 ASP.NET路由是完全可扩展和可定制的。

  • IIS团队的成员在这里发表了一篇很棒的文章,介绍了两者之间的区别。

    我建议的一个警告是,对于WebForms,在使用"路由"时需要小心。我已经编写了一个示例实现,该示例实现了如何将路由与WebForms一起使用,从而解决了这些问题,并有望帮助回答您的问题。


    您是否希望将格式化的网址作为生成页面的工厂?

    还是要使.aspx消失?

    重写,是为了使.aspx消失,或者只是整理URL。

    路由用于查看请求并确定应由哪个对象处理。听起来很像,菲尔·哈克(phil haack)对此有一些不错的文章。

    在iis6中,isapiRewrite非常好


    最近,我刚刚编写了自己的重写系统,以使站点上的URL看起来更好。基本上,您将需要编写自己的IHttpModule并将其添加到web.config中以拦截传入的请求。然后,您可以使用HttpContext.Current.RewritePath更改所指向的内容。

    您还需要将站点配置为使用aspnet_isapi进行所有操作。

    您会发现很多小问题,例如尝试使用在其上使用"尾巴"的页面(例如PageMethods),或者页面元素和表单回发的路径,但是您将逐步解决它们。

    如果有兴趣,我可以发布代码链接,您可以签出。我已经解决了许多问题,因此您可以随时阅读。我敢肯定,还有很多其他人也这样做,这可能也是很好的资源。


    您可能想看看我对这个问题的答案:ASP.NET-构建您自己的路由系统。我提供了一些很好的参考,以帮助您使用url重写方法或ASP.NET MVC项目中提供的新路由引擎来构建自己的路由系统。


    对于IIS上的URL重写,IIRF可在IIS5、6、7中使用。免费。简单。快速。开源。正则表达式支持。


    .Net 3.5 SP1中提供的Dynamic Data项目显示了URL路由实现的一个很好的例子。


    推荐阅读

      linux组播路由命令?

      linux组播路由命令?,网络,信息,地址,系统,通信,工具,命令,服务,数字,控制台,L

      linux写永久路由命令?

      linux写永久路由命令?,信息,系统,网络,工作,新增,环境,路由,地址,情况,服务,l

      删除路由命令linux?

      删除路由命令linux?,系统,信息,网络,地址,管理,环境,路由,命令,工作,基础,WIN

      linux看路由表命令?

      linux看路由表命令?,网络,信息,状态,系统,地址,数字,命令,电脑,工具,环境,用

      linux路由匹配命令?

      linux路由匹配命令?,信息,地址,系统,电脑,设备,服务,网络,时间,数字,情况,Lin

      linux设置路由器命令?

      linux设置路由器命令?,网络,信息,代码,地址,电脑,工作,环境,系统,密码,路由,l

      linux设置路由器命令?

      linux设置路由器命令?,网络,信息,代码,地址,电脑,工作,环境,系统,密码,路由,l

      linux永久路由命令?

      linux永久路由命令?,系统,网络,信息,密码,服务,状态,地址,管理,情况,工作,Lin

      linux路由追踪命令?

      linux路由追踪命令?,网络,系统,信息,地址,设备,电脑,时间,命令,通信,工具,LiN

      linux变更路由命令?

      linux变更路由命令?,代码,系统,网络,信息,路由,通讯,数据,网上,第一,地址,lin

      红帽linux加路由命令?

      红帽linux加路由命令?,信息,网络,地址,系统,新增,环境,工具,路由,数字,服务,l

      linux做路由跟踪命令?

      linux做路由跟踪命令?,网络,系统,地址,设备,信息,电脑,工作,命令,服务,全球,l

      linux修改路由命令?

      linux修改路由命令?,产品,网络,管理,系统,技术,经理,环境,数据,培训,设备,lin

      小米路由器linux命令?

      小米路由器linux命令?,网络,地址,数据,密码,系统,工具,管理,电脑,时间,管理

      linux路由表修改命令?

      linux路由表修改命令?,网络,系统,地址,信息,数据,通信,发行,命令,文件,终端,

      查看linux路由表命令?

      查看linux路由表命令?,网络,信息,系统,地址,工具,状态,软件,中心,数字,基础,

      检查路由命令linux?

      检查路由命令linux?,网络,地址,系统,信息,工具,电脑,时间,通信,服务,命令,lin

      linux跟踪路由器命令?

      linux跟踪路由器命令?,网络,地址,系统,信息,情况,工具,时间,通信,命令,管理

      linux5路由转发命令?

      linux5路由转发命令?,系统,电脑,密码,地址,网络,服务,工作,情况,设备,管理,li

      linux加静态路由命令?

      linux加静态路由命令?,信息,系统,网络,地址,环境,服务,路由,静态,情况,设计,L