您为ASP.Net使用什么Url重写器?

时间:2008-08-18 14:32:12

标签: asp.net iis url-rewriting urlrewriter

我看过ASP.Net和IIS的几个URL重写器,并想知道其他人使用什么,以及为什么。

以下是我使用或查看过的内容:

  • ThunderMain URLRewriter:在以前的项目中使用,并没有我们想要的灵活性/性能
  • Ewal UrlMapper:用于当前项目,但来源似乎已被放弃
  • UrlRewritingNet.UrlRewrite:看起来像一个体面的图书馆,但文档的语法很差让我感到不安
  • UrlRewriter.NET:这是我目前最喜欢的,具有很大的灵活性,虽然泵入替换正则表达式的额外功能会改变标准的.Net正则表达式语法
  • Managed Fusion URL Rewriter:我在堆栈溢出的previous question中找到了这个,但还没有尝试过,从示例语法来看,它似乎不能通过web.config编辑

11 个答案:

答案 0 :(得分:7)

System.Web.Routing刚刚与.NET 3.5一起发布。

您可以在自定义HttpModule

中使用Request.RewritePath()

我更喜欢使用IHttpHandlerFactory实现,并且可以完全控制所有传入的URL以及它们映射到的位置。

答案 1 :(得分:4)

如果我现在开始一个新的Web项目,我将从头开始考虑使用MVC。它使用重写的URL作为标准。

答案 2 :(得分:3)

IIS 7具有相当强大的URL Rewrite Module并且与IIS集成良好。

答案 3 :(得分:3)

+1 UrlRewritingNET.URLRewrite - 在单个盒子上的数百个服务/门户/网站中使用多年没有问题! (@Jason - 那是你正在谈论的那个,对吗?)

我也在个人网站上使用了URLRewriter.NET,发现它很有趣。 @travis,你对改变的语法是正确的,但是一旦你习惯它,它就会很好。

答案 4 :(得分:2)

我对Ionic's ISAPI Rewrite Filter有很好的体验,这与ISAPI_Rewrite非常相似,除了免费。两者都是在mod_rewrite之后建模的,并且是ISAPI过滤器,因此您无法在代码中管理它们,因为您必须在IIS中进行设置。

答案 5 :(得分:2)

如果您在IIS7 Windows 2008环境中,我不推荐使用UrlRewritingNet。

原因: UrlRewritingNet要求您的应用池模式=经典且未集成。 这不是最佳选择 此外,他们的项目在过去两年似乎已经死了。

答案 6 :(得分:2)

我之前在一个人流量很大的网站上使用过UrlRewriting.NET - 它对我们很有用。我相信开发人员都是德国人,所以英文文档可能没那么好。我强烈推荐它。

答案 7 :(得分:1)

我刚刚安装了Helicon's ISAPI Rewrite 3。与htaccess完全一样。到目前为止,我正在挖掘它。

答案 8 :(得分:1)

我使用.NET URL Rewriter and Reverse Proxy取得了巨大成功。它几乎与mod_rewrite相同,并且几乎使用了所有相同的语法。该项目的所有者非常有帮助和友好,产品很好。这个gem提供了重写和代理功能,许多解决方案都没有提供。 IMO,值得一看。

答案 9 :(得分:0)

为UrlRewritingNet.UrlRewrite +1,但为什么我总是需要用.aspx结束我的网址?我认为应该改进更好的正则表达式。

为什么我总是必须在virtualURL localhost / Products / Beverages.aspx“,”localhost / Products / Condiments.aspx“中以aspx结尾。我只想输入localhost / Products / Beverages”,“localhost / Products / “看起来像MVC路线的调味品。

This一看好,但它不适用于我的网站。我还是想不出来。

答案 10 :(得分:0)

asp.net路由提供了url重写的要求,甚至更多。使用asp.net路由,您不仅可以“重写URL”,还可以为各种请求创建自定义处理程序。 然而,asp.net路由至少需要asp.net sp1。

您为简单路由工作所做的基本操作是在Application_Start中添加一些路由处理程序,甚至在Global.asax.cs文件中也是如此。

 protected void Application_Start(object sender, EventArgs e)
        {

                        RegisterRoutes(RouteTable.Routes);


        }
        private static void RegisterRoutes(RouteCollection routes)
        {          

            routes.Add("Routing1", new Route("/Blog/id/2","/Blog.aspx"));

        }