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

发布于 2024-11-05 23:49:37 字数 720 浏览 8 评论 0原文

我正在寻找管理路由中长网址的最佳方法。我有很多类似这样的操作:

/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) { ... }

参数的任何更改都会在每个路线/操作中产生多重更改,这就是问题。它没有弹性。是否有可能将参数映射到某个对象?看起来像这样的东西:

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

嗯...最终我认为我可以使用操作过滤器来解决这个问题:

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

但我不喜欢这个解决方案

最好的问候

Im searching the best way for manage long urls in routing. I have many actions which looks like this:

/a/b/c/d/e

the route:

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

the controller:

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

any change in params gives multi-change in every route/action, and that is the problem. Its not elastic. Is there any possibility to map params to some object? Something that would look like:

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

Hmm... eventually I think that I could use the Action Filter to solve this:

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

but I dont like this solution

Best regards

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

魔法唧唧 2024-11-12 23:49:37

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

Create an object like you did and use ModelBinder to construct it instead of filter. The Default Model binder should work, if not then create a custom one.

黑色毁心梦 2024-11-12 23:49:37

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

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 将映射到模型中的属性。

Keep your route settings the same, just create a new model with properties matching the parameters in the route settings:

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; }
}

Then use XxxModel as your parameter in the action:

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

a, b, c, d and e will be mapped to the properties in the model.

独木成林 2024-11-12 23:49:37

这对你有用吗?

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

并且

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

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

Will this work for you?

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

and

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

params will be one string (eg. 1/2/3/4/5)
you'll have to do a params.Split("/") and Convert.ToInt32() to the parameters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文