ASP.NET MVC3自定义路由映射?

时间:2012-04-28 02:49:03

标签: asp.net-mvc-3 routes action

网址如:

/query/test/p1s1c1

行动是:

public ActionResult Test(int price = 1, int size = 1, int category = 1)
{
    ViewBag.param = "price:" + price + "size:" + size + "category" + category;
    return View();
}

我的路线映射是:

routes.MapRoute(
    "Query", // Route name
    "Query/test/p{price}s{size}c{category}",
    new { controller = "Query", action = "Test", price = UrlParameter.Optional, size = UrlParameter.Optional, category = UrlParameter.Optional },
    new { price = @"\d+", size = @"\d*" , category = @"\d*" } // Parameter defaults 
    );

但它不起作用,谁可以帮助我?

2 个答案:

答案 0 :(得分:1)

当框架处理URL请求时,它会尝试将请求的URL与按Routes的顺序添加到RouteCollection的路由进行匹配。

因此,将您的路线放在默认路线之前,它应该有效:

routes.MapRoute(
                "Query", // Route name
                ///...
                );

routes.MapRoute(
                "Default", // Route name
                ///...
               );

现在使用url:/query/test/p2s2c2执行的Test操作将包含以下参数:price = 2, size = 2, category = 2

您可以阅读有关How URLs Are Matched to Routes的更多信息。

答案 1 :(得分:0)

试试这个...

routes.MapRoute(
    "Query", // Route name
    "Query/test/{price}/{size}/{category}",
    new { controller = "Query", action = "Test", price = UrlParameter.Optional, size = UrlParameter.Optional, category = UrlParameter.Optional },
    new { price = @"\d+", size = @"\d*" , category = @"\d*" } // Parameter defaults 
    );

并在该默认路线之后......