【问题标题】:How do I make a route as default when multiple routes are defined?定义多个路由时,如何将路由设为默认路由?
【发布时间】:2016-09-10 14:08:03
【问题描述】:

我有一个 mvc 网站,其中指定了默认路由。

我的应用程序中有一个 url,定义为:

http://localhost:3729/Information?Cust_ID=1&Cust_IMAGE_ID=2

我的 URL 不会像上面那样显示,而是以上面的格式显示,但像下面的那样:

http://localhost:3729/Information/1/2

所以我定义了一个类似的路线:

routes.MapRoute(
    name: "Information",
    url: "{controller}/{action}/{Cust_ID}/{Cust_IMAGE_ID}",
   defaults: new { controller = "Information", action = "Index", Cust_ID = UrlParameter.Optional, Cust_IMAGE_ID = UrlParameter.Optional
});

并将其添加到现有的 routeconfig.cs。

这条路线在路线表中排名第二。

当我运行应用程序并访问页面时,我没有得到我想要的格式。

当我把这条路线放在第一位时,我得到了我想要的功能,但应用程序直接打开了这个页面,而不是主页。

如何实现我想要的功能。

我的问题是 - 在路由表中定义的多条路由中,我想将一条路由设为默认路由。

【问题讨论】:

  • 另一条路线是什么?并删除Cust_ID = UrlParameter.Optional(只有最后一条路由可以是可选的,如果另一条路由是url: "{controller}/{action}/{id}则也删除Cust_IMAGE_ID = UrlParameter.Optional。

标签: asp.net-mvc routing


【解决方案1】:

您有两个主要问题:

  1. 必须在一般路线之前声明特定路线。
  2. 您定义的 URL 模式与预期的 URL http://localhost:3729/Information/1/2 不匹配。

要解决这些问题,您应该在默认路由之前定义路由,如下所示。

routes.MapRoute(
    name: "Information",
    url: "Information/{Cust_ID}/{Cust_IMAGE_ID}",
    defaults: new { controller = "Information", action = "Index", Cust_IMAGE_ID = UrlParameter.Optional
});

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

您还使用可选的Cust_ID 参数定义了您的“信息”URL,我猜这没有任何意义(除非您希望URL /Information 列出所有客户)。根据您的要求,将Cust_IMAGE_ID 设为可选也可能没有任何意义。

附带说明,如果图像实际显示在页面上,将客户图像 ID 放入 URL 似乎是个坏主意。这意味着用户可以更改 URL 以提取与当前客户无关的不同客户的图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多