【问题标题】:Translate a url to a route将 url 翻译成路由
【发布时间】:2010-09-22 09:09:15
【问题描述】:

我觉得我在这里重新发明了轮子,但我需要找到一种方法从一个包罗万象的 URL 中获取一个 URL,并将其重定向到另一个路由。

这样做的原因是因为我需要做一些事情,比如为某些 url 添加会话 cookie,然后将它们传递给相关操作。

实现这一点的最佳方式是什么?

提前感谢您的帮助!

【问题讨论】:

    标签: asp.net asp.net-mvc routing


    【解决方案1】:

    您可以尝试在运行时更改母版页。不过,这不是最漂亮的解决方案。

    Theming Support

    【讨论】:

      【解决方案2】:

      如果我理解问题...

      查看您想要从以下位置获取通配符的上一个问题 (redirect-to-controller-but-with-a-different-master-using-a-catchall-wildcard):

      routes.MapRoute(
          "Partner",
          "partners/{partner}/{*wildcard}",
          new { controller = "Partners", action = "PartnerRedirect" }
      );
      

      并在 Partners/PartnerRedirect 操作中,将其发送到通配符中指定的正确控制器/操作?

      我不知道最好的方法,但是查看单元测试 url 路由的方法提出了这个:

      http://weblogs.asp.net/stephenwalther/archive/2008/07/02/asp-net-mvc-tip-13-unit-test-your-custom-routes.aspx

      我不确定它是否完全适合(即可能不必模拟东西),但看起来所有数据都是从 GetRouteData 返回以传递给 RedirectToAction 方法。

      【讨论】:

        【解决方案3】:

        哦,所以你不想重定向?您希望 URL 保留:

        mysite.com/partners/pepsi/products/cola.htm

        但服务:

        mysite.com/products/cola.htm

        我家里没有 MVC,但你不能用不同的方式定义你的路线吗?

        代替:

        routes.MapRoute(
            "Partner",
            "partners/{partner}/{*wildcard}",
            new { controller = "Partners", action = "PartnerRedirect" }
        );
        

        做:

        routes.MapRoute(
            "Partner",
            "partners/{partner}/{controller}/{action}/{other stuff you need}",
            new { /* whatever defaults you want */ }
        );
        

        该操作现在可以使用合作伙伴变量来执行任何操作,并且您可以向合作伙伴添加路由约束,以便只有有效的匹配。

        (我认为)然后您可以在您的操作/控制器上使用操作过滤器,以根据合作伙伴参数执行适当的操作(我认为它应该在过滤器的 httpcontext 中!)这样您就没有如果您想对合作伙伴进行一些基本检查/操作,请在每个操作中重复代码。

        这里有一篇关于给猫剥皮的很多方法的不错的文章:

        http://weblogs.asp.net/stephenwalther/archive/2008/08/12/asp-net-mvc-tip-31-passing-data-to-master-pages-and-user-controls.aspx

        【讨论】:

          【解决方案4】:

          不,它实际上是重定向,但重定向对用户不可见(与在 Web 窗体中完成 Server.Transfer() 的方式非常相似。

          您指向的链接仅使用一个母版页,而我有许多母版页(接近 200 个)。

          我曾考虑为这些合作伙伴提供单独的路由处理程序,但母版页选择进入了等式。

          我想我将不得不创建一个 ViewExtension 来克服这些问题...

          【讨论】:

          • 也许可以让您的母版页根据合作伙伴参数呈现用户控件?不过听起来不是很干净。我之前没有阅读过关于视图扩展的信息,所以无法发表评论。
          猜你喜欢
          • 2012-02-22
          • 2019-11-18
          • 1970-01-01
          • 2021-07-08
          • 2013-08-10
          • 2016-07-11
          • 2017-04-15
          • 2018-09-02
          • 2021-10-13
          相关资源
          最近更新 更多