如何在路由忽略时将URL传递给控制器​​?

时间:2010-10-22 16:50:04

标签: asp.net-mvc

在asp.net MVC 2中是否有办法可以路由请求并忽略一部分URL并作为变量传递给控制器​​?

我的需求声明我必须动态地将页面存储在数据库中,并且可以通过查看URL并读取URL段来查找相关页面来访问它们。实际上,我需要一个站点控制器,URL的剩余部分将被传递到该控制器。

Site-Controller/this/is/a/page

所以如果网站控制器拿起/ this /是/ a / page'字符串'

这可能吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

是的,使用通配符路由,例如:

        routes.MapRoute(
            "SiteController",                                        // Route name
            "Site-Controller/{*url}",                               // URL with parameters
            new { controller = "SiteController", action = "Index" }, // Parameter defaults
            null                                                     // constraints
        );

然后你的行动如下:

public ActionResult Index(string url)
{
}

答案 1 :(得分:2)

在Global.asax中创建一个通配符Route,它捕获url第一段之后的所有内容并将其传递给Action方法:

routes.MapRoute("Page", 
                "Site-Controller/{*urlsegments}",
                new { 
                  controller = "Site-Controller",
                  action = "YourAction",
                  urlsegments = ""
                });

确保您的Action方法接受'urlsegments'参数,您可以从那里使用它:

public ActionResult YourAction(string urlsegments)
{
    // Do something with the segments here
}