网址如:
/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
);
但它不起作用,谁可以帮助我?
答案 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
);
并在该默认路线之后......