如何在MVC中使用url路由url

时间:2013-05-27 11:49:50

标签: c# asp.net asp.net-mvc asp.net-mvc-4

基本上我想拿一个网址:

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

...并在视图中可以访问的某个变量中,使用http://example.com/community/www.foo.com/bar视图提供给我的http://example.com/community/www.foo.com视图。

怎么可以这样做?

注意:我试过这个:

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

使用http://example.com/community/www.foo.com/bar但不使用{{3}}(IIS尝试解析后者并提供404)。

1 个答案:

答案 0 :(得分:2)

来自MSDN

  

有时您必须处理包含变量的URL请求   网址段数。定义路径时,可以指定该路径   如果一个URL的段数多于模式中的段数,则额外的   细分被视为最后一部分的一部分。处理   通过这种方式,您可以使用a标记最后一个参数   星号(*)。这被称为全能参数。一条路线   使用catch-all参数也将匹配不包含的URL   最后一个参数的任何值。以下示例显示了一条路线   与未知数量的段匹配的模式。

query/{queryname}/{*queryvalues}

在你的情况下,它将是:

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

替代且更健壮的方法是对URL部分使用某种编码 - 例如来自RFC4648的Base64URI编码