2008-11-14 88 views
2

我觉得我重新发明轮子在这里,但我需要找到的采取了URL从包罗万象,并重定向,为另一种途径的方式。翻译的URL路径

这样做的原因是因为我需要做一些事情,如添加会话cookie对于某些URL,然后把它们交给他们的相关动作。

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

在此先感谢您的帮助!

回答

2

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

Theming Support

0

如果我没有理解问题...

在你前面的问题(redirect-to-controller-but-with-a-different-master-using-a-catchall-wildcard)找你要采取从通配符:

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

而在合作伙伴/ PartnerRedirect行动,将其发送到在通配符中指定的权利控制器/操作?

我也没办法做到这一点的最好办法,但寻找方法进行单元测试的URL路径选择提出了这一点:

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

我不知道这是否是精确匹配(即。可能没有假的东西),但它看起来像所有的数据从GetRouteData回传给RedirectToAction方法。

0

哦,所以你不想重定向?你想要的网址留下来:

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

0

不,它实际上是一个重定向,但重定向是不可见的用户(在许多同样的方式作为一个Server.Transfer的()在Web窗体进行。

你指着只使用一个母版页的链接,而我有很多的母版页(接近200)。

我曾想过为这些合作伙伴分配不同的路由处理程序,但主页选择进入了等式。

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

+0

也许有可能有你的母版页呈现基于合作伙伴参数的用户控件?虽然听起来不太好。我之前没有阅读过有关视图扩展的内容,所以无法评论。 – anonymous 2008-11-17 12:55:08