我觉得我重新发明轮子在这里,但我需要找到的采取了URL从包罗万象,并重定向,为另一种途径的方式。翻译的URL路径
这样做的原因是因为我需要做一些事情,如添加会话cookie对于某些URL,然后把它们交给他们的相关动作。
什么是实现这个的最佳方式?
在此先感谢您的帮助!
我觉得我重新发明轮子在这里,但我需要找到的采取了URL从包罗万象,并重定向,为另一种途径的方式。翻译的URL路径
这样做的原因是因为我需要做一些事情,如添加会话cookie对于某些URL,然后把它们交给他们的相关动作。
什么是实现这个的最佳方式?
在此先感谢您的帮助!
您可以尝试在运行时更改的母版页。这不是最美丽的解决方案。
如果我没有理解问题...
在你前面的问题(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路径选择提出了这一点:
我不知道这是否是精确匹配(即。可能没有假的东西),但它看起来像所有的数据从GetRouteData回传给RedirectToAction方法。
哦,所以你不想重定向?你想要的网址留下来:
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中,我想也是这样)做适当的动作,这样你就不会如果您想对合作伙伴进行一些基本检查/操作,则必须在每个操作中重复代码。
这里是一个不错的向上写了很多的方法来皮肤猫:
不,它实际上是一个重定向,但重定向是不可见的用户(在许多同样的方式作为一个Server.Transfer的()在Web窗体进行。
你指着只使用一个母版页的链接,而我有很多的母版页(接近200)。
我曾想过为这些合作伙伴分配不同的路由处理程序,但主页选择进入了等式。
我想我将不得不创建一个ViewExtension来克服这些问题......
也许有可能有你的母版页呈现基于合作伙伴参数的用户控件?虽然听起来不太好。我之前没有阅读过有关视图扩展的内容,所以无法评论。 – anonymous 2008-11-17 12:55:08