3

我正在制作 asp.net mvc 应用程序,我有下一个问题。例如,我需要生成这样的 url www.something.com/abc,其中 abc 是产品 ID,www.something.com/def而 def 是公司 ID。

有人可以向我展示一些带有这样的路由链接的代码吗?

@Html.RouteLink("Sample link 1", "routeName 1", 
     new {controller = "Home", action = "action name 1", parameter="abc" })

@Html.RouteLink("Sample link 2", "routeName 2", 
     new {controller = "Home", action = "action name 2", parameter="def" })

只是为了澄清我的问题,例如:

这是路由系统

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "aaaaa",
                url: "{id}",
                defaults: new { controller = "Home2", action = "Index2" }
            );
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
                name: "bbbb",
                url: "{id}",
                defaults: new { controller = "Home3", action = "Index2" }
            );
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

这些是路由链接

@Html.RouteLink("bbbb", "aaaaa",new { id = 555 })
@Html.RouteLink("bbbb", "bbbb", new { id = 6666666, controller="Home3"})

他们都将我重定向到同一个动作控制器 home2 和动作 Index2。

但我指定了哪条路线首先使用“aaaaa”,其次使用“bbbb”

我还在第二个中指定了不同的控制器。

4

1 回答 1

3

您不能有 2 个外观相同的网址:

被路由到 2 个不同的控制器动作。路由引擎绝对无法消除它们之间的歧义。当收到此表单的请求时,路由引擎会按照定义的顺序评估您的路由,并与此匹配:

routes.MapRoute(
    name: "aaaaa",
    url: "{id}",
    defaults: new { controller = "Home2", action = "Index2" }
);

Home2这就是执行控制器的原因。您应该区分生成 url(使用Html.RouteLink帮助程序)的概念,您可以在其中指定路由名称和评估路由。

如果您希望能够消除这两个网址之间的歧义,则需要使用约束。例如:

routes.MapRoute(
    name: "aaaaa",
    url: "{id}",
    defaults: new { controller = "Home2", action = "Index2" },
    constraints: new { id = @"\d{1,3}" }
);

routes.MapRoute(
    name: "bbbb",
    url: "{id}",
    defaults: new { controller = "Home3", action = "Index2" },
    constraints: new { id = @"\d{4,10}" }
);

在这个例子中,第一个路由接受 1 到 3 位的 id,而第二个路由接受 4 到 10 位的 id。

于 2013-07-01T08:51:24.707 回答