如何在MVC中路由带有url的url

本文关键字:url 路由 MVC | 更新日期: 2023-09-27 18:15:25

基本上我想取一个url:

http://example.com/community/www.foo.com/bar

…然后把它交给我的http://example.com/community/视图,并把www.foo.com/bar放在razor可以在视图中访问的某个变量中。

这是怎么做到的?

注意:我试过这个:

routes.MapRoute(
    "Community",                                           
    "{controller}/{url}",                           
    new { controller = "Community", action = "Index", url = "" }
);

与http://example.com/community/www.foo.com一起工作,而不是http://example.com/community/www.foo.com/bar (IIS试图解决后者并给出404)。

如何在MVC中路由带有url的url

From MSDN:

有时候你必须处理包含变量的URL请求URL段数。当你定义路由时,你可以指定它如果URL的段数多于模式中的段数,则额外的段被认为是最后一个段的一部分。来处理附加段以这种方式用一个标记最后一个参数星号(*)。这被称为捕获所有参数。一个路由带有捕获所有参数的url也将匹配不包含最后一个参数的任意值。下面的例子展示了一条路由匹配未知数量片段的模式。
query/{queryname}/{*queryvalues}

在你的例子中,它将是:

routes.MapRoute(
    "Community",                                           
    "{controller}/{*url}",                           
    new { controller = "Community", action = "Index", url = "" }
);

另一种更健壮的方法是对URL部分使用某种编码——例如来自RFC4648的Base64URI编码