1

我有三个看起来像这样的路线:

all.html

all/page-{numpage}.html

all/page-{numpage}-limit-{limit}.html.

前两个工作正常 - 这意味着在我的控制器中,如果没有给出,我将获得 numpage 或 1 的值:

public ViewResult All(int numpage = 1, int limit = 10) {}

numpage 是我在地址栏中输入的任何内容

第三条路线根本不起作用-好像我去了第一条路线(all.html),所以它的值等于1,限制是10-默认值。但是,当我转到 all/page-4.html?limit=3 时,我得到了正确的值。我究竟做错了什么?:D

还有一件事——我动态地创建我的路由,所以注册它们的代码看起来像这样(rcache 返回正确的路由列表):

List<Tuple<Dictionary<string, string>, string, string, string>> routes = rcache.GetRoutes();

            foreach (var route in routes) {
                foreach (KeyValuePair<string, string> kvp in route.Item1) {
                    context.MapRoute(
                        route.Item4,
                        kvp.Value,
                        new { controller = route.Item2, action = route.Item3, id = UrlParameter.Optional, name = UrlParameter.Optional, numpage = UrlParameter.Optional, limit = UrlParameter.Optional }
                    );
                }
            }
4

1 回答 1

2

好吧,你在和自己打架。你为什么不把最后一条规则放在第一位,看看会发生什么?路由规则的顺序有所不同。

只是一个简短的说明。简化您的设计并避免复杂性。你正在做的事情可能会奏效,但这是一个糟糕的选择。不要这样做。

首先,您不应该允许任何人添加/编辑/删除您的路线。如果有人不真正了解它是如何工作的,那么您就是在允许他们破坏您的应用程序。我肯定会避免它。

好吧,可以说你必须这样做。那么您还需要验证路由和规则,您不能将其推送到您的路由表。

另外,假设他们添加了一条路线并且它不起作用,因为您的控制器不支持它。你会承担责任。让他们向您提出请求,然后将其添加到您的路由表中。

您是此代码的作者,其他人将无法维护您编写的内容或您在编写时的想法。

于 2012-07-11T19:26:19.150 回答