我觉得我在这里重新发明了这个轮子,但是我需要找到一种方法从捕获中获取URL,并将其重定向到另一条路径。
之所以这样做是因为我需要做一些事情,例如为某些网址添加会话Cookie,然后将其传递给相关的操作。
实现这个目标的最佳方式是什么?
提前感谢您的帮助!
答案 0 :(得分:2)
您可以尝试在运行时更改母版页。这不是最美丽的解决方案。
答案 1 :(得分:0)
如果我理解问题......
查看上一个问题(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路由的方法提出了这个:
我不确定它是否完全合适(即可能不需要模拟东西),但看起来所有数据都是从GetRouteData返回以传递给RedirectToAction方法。
答案 2 :(得分:0)
哦,所以你不想要重定向?您希望保留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中,我想再次!)这样你就没有了如果你想对合作伙伴做一些基本的检查/行动,请在每个动作中重复代码。
以下是很多关于皮肤猫的方法的写作:
答案 3 :(得分:0)
不,它实际上是一个重定向,但用户看不到重定向(与在Web窗体中完成Server.Transfer()的方式非常相似。
您指向的链接仅使用一个母版页,而我有许多母版页(接近200个)。
我曾想过为这些合作伙伴提供单独的路由处理程序,但是母版页的选择已经进入了等式。
我想我将不得不创建一个ViewExtension来克服这些问题......