3

路线:

routes.MapRoute(
    "Customer_widget",
    "customer/widget/{action}/{id}",
    new { controller = "Customer_Widget", id = UrlParameter.Optional });

测试 URL1:(确实有效) customer/widget/contact_list/1-1004-SC-0-0-0-0-0-0-Supplier-Supplier----0-0-0-0-Year-Calendar-0-Home-0

测试 URL2:(不起作用)

customer/widget/contact_list/1-1004-SC-0-0-0-0-0-0-Supplier-Supplier--6%2f1%2f2013-7%2f6%2f2013--0-0-0-0-Year-Calendar-0-Home-0  (does not work) 

我已经测试了上面的这两个 URL。第一个 URL 转到正确的位置。但是第二个 URL 只是迷路了……我不知道是什么原因造成的……我有点假设白天部分 6%2f1%2f2013-7%2f6%2f2013 会导致一些问题,但我不确定那是什么。

客户控制器

 public ActionResult Index(string id = null)
    {
      string temp = "~/customer/widget/contact_list/" + this.objURL.ToString();
      return Redirect("~/customer/widget/contact_list/" + this.objURL.ToString());
    }

Customer_WidgetController

  public ActionResult Contact_list(string id = null)
    {
      return PartialView("_contact_list",Customer_Widget.Contact_list.Load(id, ref errors));
    }

流 CustomerController ->(按地图路线) Customer_WidgetController

4

1 回答 1

0

这完全是因为编码斜线 '%2f' 符号对应于 '/'。因为这个你的网址

customer/widget/contact_list/1-1004-SC-0-0-0-0-0-0-Supplier-Supplier--6%2f1%2f2013-7%2f6%2f2013--0-0-0-0-Year-Calendar-0-Home-0

分成8个部分:

  1. 顾客
  2. 小部件
  3. 联系人列表
  4. 1-1004-SC-0-0-0-0-0-0-供应商-供应商--6
  5. 1
  6. 2013-7
  7. 6
  8. 2013--0-0-0-0-年-日历-0-首页-0

但在你的路线中,你期待 4。

要定义段的可变计数,您可以使用星号 (*),如下所示:

routes.MapRoute(
    "Customer_widget",
    "customer/widget/{action}/{*id}",
    new { controller = "Customer_Widget", id = UrlParameter.Optional });

路线系统按顺序检查路线。所以你需要小心这个并尽可能低地定义这样的路由,因为它可以捕获你不想用这条路由捕获的请求。例如,如果在您的系统中在上面的路由之后定义了以下路由,它将永远不会被捕获:

routes.MapRoute(
        "Customer_widget",
        "customer/widget/{action}/{lang}/{*id}",
        new { controller = "Customer_Widget", lang = "en", id = UrlParameter.Optional }
        new { lang = "en|es|ru"});
于 2013-07-08T06:18:06.650 回答