我尝试使用齐次参数数组为资源创建路由。
网址如下所示: 产品/类别/ {categoryId1} / {categoryId2} /.../品牌/ {brandID1} / {brandID2} / ...
并希望一个动作方法看起来像这样: public ActionResult GetProducts(IList categoryID,ILIsts brandID) {...}
其中类别和品牌是独立过滤器。
我找到了类似任务的解决方案: ASP.NET MVC 2 Parameter Array
并且想知道是否没有更美观的解决方案允许使用这个原型 public ActionResult GetProducts(IList categoryID)
而不是 public ActionResult myAction(string url)用于行动方法
- 为了避免拆分字符串和铸造?
我怎么能适合我的情况?
事先谢谢大家!
答案 0 :(得分:7)
使用自定义处理程序,就像我在this answer中发布的那样。
可能需要一些调整,但这样的事情应该有效:
public class ProductsRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
IRouteHandler handler = new MvcRouteHandler();
var vals = requestContext.RouteData.Values;
vals["categoryID"] = vals["categories"].Split("/");
vals["brandID"] = vals["brands"].Split("/");
return handler.GetHttpHandler(requestContext);
}
}
// in the route:
routes.MapRoute(
"test",
"products/category/{*categories}/brand/{*brands}",
new { Controller = "product", Action = "getproducts"}
).RouteHandler = new ProductsRouteHandler ();