1

基本上我想采用如下网址:

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)。

4

1 回答 1

2

来自MSDN

有时您必须处理包含可变数量的 URL 段的 URL 请求。定义路由时,您可以指定如果 URL 的段数多于模式中的段数,则将额外的段视为最后一段的一部分。要以这种方式处理其他段,请用星号 (*) 标记最后一个参数。这被称为包罗万象的参数。带有 catch-all 参数的路由也将匹配不包含任何最后一个参数值的 URL。以下示例显示了与未知数量的段匹配的路线模式。

query/{queryname}/{*queryvalues}

在您的情况下,它将是:

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

另一种更强大的方法是对 URL 部分使用某种编码 - 例如来自RFC4648的 Base64URI 编码

于 2013-05-27T11:52:08.723 回答