IIS URL重写与URL路由

我打算使用url路由的Web窗体应用程序。 但是,在阅读了一些post后 ,我不确定这是否是一个简单的方法。

为网页表单使用URL重写模块会更好吗? 但是,它只适用于IIS7。 最初,有一些关于URL路由与Asp.Net MVC完全分离的嗡嗡声,它可以用于web表单。

很想听到任何build议..

这里有一个伟大的post,关于两个来自IIS小组成员之间的差异。

我build议的一个警告是,对于WebForms,使用Routing时需要小心。 我已经写了一个示例实现,介绍如何使用WebForms进行路由 ,解决这些问题,并希望可以帮助解答您的问题。

这是我find关于这个主题的最好的文章:由Ruslan Yakushev IIS URL重写和ASP.NET路由 。

IIS URL重写

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

IIS URL重写

ASP.NET路由

ASP.NET路由作为一个托pipe代码模块实现,插入到Resolve Cache阶段(PostResolveRequestCache事件)和Map Handler阶段(PostMapRequestHandler)的IIS请求处理pipe道中。 ASP.NET路由被configuration为运行对Web应用程序的所有请求。

IIS URL路由

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

  1. URL重写用于在Web服务器处理请求之前操作URLpath。 URL重写模块不知道什么处理程序将最终处理重写的URL。 另外,实际的请求处理程序可能不知道该URL已被重写。
  2. ASP.NET路由用于根据请求的URLpath向请求处理程序发送请求 。 与URL重写相反,路由组件知道处理程序,并select应为请求的URL生成响应的处理程序。 您可以将ASP.NET路由看作高级处理程序映射机制。

除了这些概念上的差异之外,IIS URL重写和ASP.NET路由之间还存在一些function差异:

  1. IIS URL重写模块可用于任何types的Web应用程序,包括ASP.NET,PHP,ASP和静态文件。 ASP.NET路由只能用于基于.NET Framework的Web应用程序。
  2. 无论集成的还是传统的IISpipe道模式用于应用程序池,IIS URL重写模块的工作方式都是相同的。 对于ASP.NET路由,最好使用集成pipe道模式。 ASP.NET路由可以在经典模式下工作,但在这种情况下,应用程序URL必须包含文件扩展名,或者应用程序必须configuration为在IIS中使用“*”处理程序映射。
  3. URL重写模块可以根据域名,HTTP标头和服务器variables进行重写决定。 默认情况下,ASP.NET路由仅适用于URLpath和HTTP-Method标头。
  4. 除了重写之外,URL重写模块还可以执行HTTPredirect,发出自定义状态码和放弃请求。 ASP.NET路由不执行这些任务。
  5. URL重写模块在当前版本中不可扩展。 ASP.NET路由是完全可扩展和可定制的。

你想格式化的url是一个产卵页面的工厂?

或者你想让.aspx离开?

重写,是为了使.aspx离开,或者只是为了收拾url。

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

在iis6中,isapiRewrite,非常好

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

您还需要configuration您的网站使用aspnet_isapi的一切 。

你会发现很多小问题,比如尝试使用页面上的“尾巴”(比如PageMethods),或者页面元素的path和表单回传,但是你可以通过它们来完成。

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

你可能想看看我对这个问题的答案 : ASP.NET – build立你自己的路由系统 。 我包含了一些很好的参考资料,可以帮助构build自己的路由系统,可以使用url重写方法,也可以使用ASP.NET MVC项目中使用的新路由引擎。

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

对于IIS上的URL重写, IIRF在IIS5,6,7中工作。免费。 简单。 快速。 开源。 正则expression式支持。