如何在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)。
From MSDN:
有时候你必须处理包含变量的URL请求URL段数。当你定义路由时,你可以指定它如果URL的段数多于模式中的段数,则额外的段被认为是最后一个段的一部分。来处理附加段以这种方式用一个标记最后一个参数星号(*)。这被称为捕获所有参数。一个路由带有捕获所有参数的url也将匹配不包含最后一个参数的任意值。下面的例子展示了一条路由匹配未知数量片段的模式。query/{queryname}/{*queryvalues}
在你的例子中,它将是:
routes.MapRoute(
"Community",
"{controller}/{*url}",
new { controller = "Community", action = "Index", url = "" }
);
另一种更健壮的方法是对URL部分使用某种编码——例如来自RFC4648的Base64URI编码