50

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

将URL 重写模块用于 Web 表单会更好吗?但是,它仅适用于 IIS7。最初,有人认为 URL 路由与 Asp.Net MVC 完全分离,并且可以用于 Web 表单。

很想听听任何建议..

4

7 回答 7

41

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

IIS URL 重写

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

IIS URL 重写

ASP.NET 路由

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

IIS URL 路由

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

  1. URL 重写用于在 Web 服务器处理请求之前操纵 URL 路径。URL 重写模块不知道什么处理程序最终将处理重写的 URL。此外,实际的请求处理程序可能不知道 URL 已被重写。
  2. ASP.NET 路由用于根据请求的 URL 路径将请求分派给处理程序。与 URL 重写相反,路由组件知道处理程序并选择应该为请求的 URL 生成响应的处理程序。您可以将 ASP.NET 路由视为一种高级处理程序映射机制。

除了这些概念上的差异之外,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-rewrite 模块可以根据域名、HTTP 标头和服务器变量做出重写决策。默认情况下,ASP.NET 路由仅适用于 URL 路径和 HTTP-Method 标头。
  4. 除了重写之外,URL-rewrite 模块还可以执行 HTTP 重定向、发出自定义状态代码和中止请求。ASP.NET 路由不执行这些任务。
  5. URL-rewrite 模块在其当前版本中不可扩展。ASP.NET 路由是完全可扩展和可定制的。
于 2008-11-08T18:55:35.360 回答
26

这里有一篇很棒的帖子,关于 IIS 团队成员的两者之间的差异。

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

于 2008-09-18T15:55:04.623 回答
7

您希望格式化的 url 成为生成页面的工厂吗?

或者你想让 .aspx 消失吗?

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

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

在iis6,isapiRewrite,很不错

于 2008-09-18T04:47:02.543 回答
4

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

您还需要将您的站点配置为使用 aspnet_isapi 来处理所有内容

在此过程中,您会发现很多小问题,例如尝试使用在其上使用“尾部”的页面(例如 PageMethods),或页面元素的路径和表单回发,但您会解决这些问题。

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

于 2008-09-18T14:23:37.120 回答
2

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

于 2008-09-18T14:08:34.207 回答
0

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

于 2008-09-18T04:48:56.097 回答
0

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

于 2009-03-09T07:15:04.003 回答