我觉得我在这里重新发明了轮子,但我需要找到一种方法从一个包罗万象的 URL 中获取 URL,并将其重定向到另一条路线。
这样做的原因是因为我需要做一些事情,比如为某些 url 添加会话 cookie,然后将它们传递给他们的相关操作。
实现这一点的最佳方法是什么?
提前感谢您的帮助!
我觉得我在这里重新发明了轮子,但我需要找到一种方法从一个包罗万象的 URL 中获取 URL,并将其重定向到另一条路线。
这样做的原因是因为我需要做一些事情,比如为某些 url 添加会话 cookie,然后将它们传递给他们的相关操作。
实现这一点的最佳方法是什么?
提前感谢您的帮助!
您可以尝试在运行时更改母版页。虽然这不是最漂亮的解决方案。
如果我理解问题...
查看您之前的问题(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 方法。
哦,所以你不想要重定向?您希望 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 中!)这样您就不必重复代码如果您想对合作伙伴进行一些基本的检查/操作,则在每个操作中。
这是一篇关于给猫剥皮的很多方法的不错的文章:
不,它实际上是重定向,但重定向对用户不可见(与在 Web 窗体中完成 Server.Transfer() 的方式大致相同。
您指向的链接仅使用一个母版页,而我有许多母版页(接近 200 个)。
我曾考虑为这些合作伙伴提供单独的路由处理程序,但母版页的选择进入了等式。
我想我将不得不创建一个 ViewExtension 来克服这些问题......