具有齐次参数数组的MVC路由

时间:2010-10-06 16:14:34

标签: asp.net asp.net-mvc-2

我尝试使用齐次参数数组为资源创建路由。

网址如下所示: 产品/类别/ {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)

用于行动方法

- 为了避免拆分字符串和铸造?

我怎么能适合我的情况?

事先谢谢大家!

1 个答案:

答案 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 ();