Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将url转换为路由_Asp.net_Asp.net Mvc_Routing - Fatal编程技术网

Asp.net 将url转换为路由

Asp.net 将url转换为路由,asp.net,asp.net-mvc,routing,Asp.net,Asp.net Mvc,Routing,我觉得我正在重新发明轮子,但我需要找到一种方法,从catchall中获取URL,并将其重定向到另一条路径 这是因为我需要做一些事情,比如为某些URL添加会话cookie,然后将它们传递给相关的操作 实现这一点的最佳方式是什么 提前感谢您的帮助 如果我理解这个问题 查看您的上一个问题(),您希望从以下位置获取通配符: routes.MapRoute( "Partner", "partners/{partner}/{*wildcard}", new { controller

我觉得我正在重新发明轮子,但我需要找到一种方法,从catchall中获取URL,并将其重定向到另一条路径

这是因为我需要做一些事情,比如为某些URL添加会话cookie,然后将它们传递给相关的操作

实现这一点的最佳方式是什么


提前感谢您的帮助

如果我理解这个问题

查看您的上一个问题(),您希望从以下位置获取通配符:

routes.MapRoute(
    "Partner",
    "partners/{partner}/{*wildcard}",
    new { controller = "Partners", action = "PartnerRedirect" }
);
在Partners/PartnerRedirect操作中,将其发送到通配符中指定的正确控制器/操作

我不知道最好的方法是什么,但看看单元测试url路由的方法,我发现:


我不确定它是否完全合适(即,可能不需要模拟东西),但看起来所有数据都是从GetRoutedData返回的,并传递给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" }
);
做:

该操作现在有了partner变量来执行任何操作,您可以向partner添加路由约束,以便只有有效的约束匹配

(我认为)然后,您可以在您的操作/控制器上使用操作过滤器,根据partner参数执行适当的操作(我认为它应该在过滤器的httpcontext中!),这样,如果您想对partner执行一些基本检查/操作,就不必在每个操作中重复代码

下面是一篇关于剥猫皮的很多方法的文章:


不,它实际上是一个重定向,但用户看不到该重定向(与服务器的方式大致相同)。Transfer()是在Web表单中完成的

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

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


我想我必须创建一个ViewExtension来克服这些问题…

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


也许可以让母版页根据partner参数呈现用户控件?听起来不太干净。我以前没有读过视图扩展,因此无法发表评论。
routes.MapRoute(
    "Partner",
    "partners/{partner}/{controller}/{action}/{other stuff you need}",
    new { /* whatever defaults you want */ }
);