IIS URL重写与URL路由

时间:2008-09-18 04:45:55

标签: asp.net asp.net-mvc iis routing url-rewriting

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

URL Rewrite module用于网络表单会更好吗?但是,它仅适用于IIS7。最初,有一些嗡嗡声,URL路由完全与Asp.Net MVC分离,它可以用于Web表单。

很想听到任何建议。

7 个答案:

答案 0 :(得分:39)

这是我发现的有关此主题的最佳文章:Ruslan Yakushev的IIS URL Rewriting and ASP.NET routing

IIS URL重写

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

IIS URL Rewriting

ASP.NET路由

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

IIS URL Routing

URL重写和ASP.NET路由之间的差异:

  1. URL重写用于在Web服务器处理请求之前操作URL路径 。 URL重写模块不知道哪个处理程序最终将处理重写的URL。此外,实际的请求处理程序可能不知道URL已被重写。
  2. ASP.NET路由用于根据请求的URL路径将请求分派给处理程序。与URL重写相反,路由组件知道处理程序并选择应该为请求的URL生成响应的处理程序。您可以将ASP.NET路由视为高级处理程序映射机制。
  3. 除了这些概念差异之外,IIS URL重写和ASP.NET路由之间存在一些功能差异:

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

答案 1 :(得分:25)

有一个great post here关于两者与IIS团队成员之间的差异。

我建议的一个警告是,对于WebForms,在使用Routing时需要小心。我已经编写了一个示例实现,说明了如何使用routing with WebForms来解决这些问题并希望有助于回答您的问题。

答案 2 :(得分:7)

您希望格式化的网址成为产生网页的工厂吗?

或者你想让.aspx消失吗?

重写,是为了让.aspx消失,或者只是为了整理网址。

路由,用于查看请求并确定应该处理它的对象。他们听起来很相似,phil haack有一些关于这个主题的好文章。

iis6中的

,isapiRewrite,非常好

答案 3 :(得分:4)

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

您还需要将自己的网站配置为use the aspnet_isapi for everything

你会发现很多小问题,比如试图处理使用“tails”的页面(比如PageMethods),或者页面元素和表单回发的路径,但是你会通过它们

如果有兴趣,我可以发布代码链接,你可以查看。我已经解决了很多问题,所以你可以随时阅读它。我相信还有很多其他人也做过这样的事情,也可能是很好的资源。

答案 4 :(得分:2)

您可能需要查看我的answer这个问题:ASP.NET - Building your own routing system。我提供了一些很好的参考资料,可以使用url重写方法或者你可以使用的ASP.NET MVC项目中使用的新路由引擎来构建自己的路由系统。

答案 5 :(得分:0)

.Net 3.5 SP1提供的动态数据项目显示了网址路由实现的一个很好的示例。

答案 6 :(得分:0)

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