是否有文章在某处解释了路线匹配的确切工作方式以及它的功能?
例如,我如何编写一条路线来捕捉所有内容,以便:
/ /something /something/else /something/else/again
所有映射到同一控制器操作,URL作为参数传递?
{*anything}
以上似乎不起作用。它可以不处理参数内的斜杠吗?
答案 0 :(得分:3)
以下代码几乎所有内容
。http://www.mysite.com/
例如,我仍然会被路由到default.aspx。但是像
这样的东西http://www.mysite.com/some/page/that/doesnt/exist
将被TestRouteHandler捕获。 {* fields}路由说明符应该在传递给路由器的RequestContext.RouteData对象中结束,这样你就可以做任何你想做的事情了。但是,在那时,你基本上是在实现一个重写引擎。
public class Routes
{
public static void Register(RouteCollection routes)
{
// setup legacy url routing
routes.Add(new Route("{*fields}",new TestRouteHandler()));
}
}
public class TestRouteHandler : IRouteHandler
{
public virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
{
Page page = BuildManager.CreateInstanceFromVirtualPath("/default.aspx", typeof(Page)) as Page;
return page;
}
}
或者,您可以指定顶级路线,例如
routes.Add(new Route("dave/{*fields}",new TestRouteHandler()));
会捕获像。
这样的项目http://www.mysite.com/dave
http://www.mysite.com/dave/test/parameter
http://www.mysite.com/dave/virtually/infinite/number/of/items/goes/here
答案 1 :(得分:1)
过去我必须使用这种方法处理它:
public ActionResult Something(string anything)
{
var anythings = anything.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
这条路线:
"something/{*anything}"
抓住一切。这可能是一种气味......但
public class HomeController : Controller
{
public ActionResult Show(string anything)
{
Response.Write(anything);
return null;
}
然后在默认路线之前......
routes.MapRoute("anything", "{*anything}", new {controller="Home",action="Show"});