URL中的参数太多 - 路由ASP.NET MVC

时间:2011-05-05 19:22:06

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

我正在寻找在路由中管理长网址的最佳方式。我有很多看起来像这样的行为:

/a/b/c/d/e

路线:

routes.MapRoute(
           "xxx",
            "{a}/{b}/{c}/{d}/{e}", 
            new { controller = "Xxx", action="Xxx"});

控制器:

public ActionResult Xxx(int a, int b, int c, int d, int e) { ... }

params的任何变化都会在每个路径/动作中产生多变化,这就是问题所在。它没有弹性。是否有可能将params映射到某个对象?看起来像:

public ActionResult Xxx(RouteParams rp) { ... }

嗯...最终我认为我可以使用Action Filter来解决这个问题:

private RouteParams rp;
public override void OnActionExecuting(FilterExecutingContext filterContext) {
  rp = new RouteParams(...);
}

但我不喜欢这个解决方案

祝你好运

3 个答案:

答案 0 :(得分:4)

像你一样创建一个对象,并使用ModelBinder来构造它而不是过滤器。默认模型绑定器应该工作,如果没有,则创建一个自定义绑定器。

答案 1 :(得分:2)

保持您的路线设置相同,只需创建一个新的模型,其属性与路线设置中的参数匹配:

public class XxxModel
{
    public int a { get; set; }
    public int b { get; set; }
    public int c { get; set; }
    public int d { get; set; }
    public int e { get; set; }
}

然后在操作中使用XxxModel作为参数:

public ActionResult Xxx( XxxModel model )
{
   ...
}

a,b,c,d和e将映射到模型中的属性。

答案 2 :(得分:0)

这对你有用吗?

routes.MapRoute(
           "xxx",
            "{*params}", 
            new { controller = "Xxx", action="Xxx"});

public ActionResult Xxx(string params) { ... }

params将是一个字符串(例如1/2/3/4/5) 您必须对参数执行params.Split("/")Convert.ToInt32()