将网址翻译成路线

时间:2008-11-14 16:19:43

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

我觉得我在这里重新发明了这个轮子,但是我需要找到一种方法从捕获中获取URL,并将其重定向到另一条路径。

之所以这样做是因为我需要做一些事情,例如为某些网址添加会话Cookie,然后将其传递给相关的操作。

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

提前感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

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

Theming Support

答案 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路由的方法提出了这个:

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

我不确定它是否完全合适(即可能不需要模拟东西),但看起来所有数据都是从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中,我想再次!)这样你就没有了如果你想对合作伙伴做一些基本的检查/行动,请在每个动作中重复代码。

以下是很多关于皮肤猫的方法的写作:

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

答案 3 :(得分:0)

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

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

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

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