Redirect 奇怪的重定向行为

Redirect 奇怪的重定向行为,redirect,asp.net-mvc-4,url-routing,Redirect,Asp.net Mvc 4,Url Routing,我想知道如何在ASP.NET MVC-4中保留URLDirect: 例如,我有这样一个: /admin/category/add/81/142 return RedirectToAction("Add", "Category", new RouteValueDictionary { {"id", siteid.Value}, {"cid", pid.HasValue ? pid.Value : cid.Value } }); 但是在我使用这个之后: /admin/categor

我想知道如何在ASP.NET MVC-4中保留
URLDirect

例如,我有这样一个:

/admin/category/add/81/142 
return RedirectToAction("Add", "Category", new RouteValueDictionary
{
   {"id", siteid.Value},
   {"cid", pid.HasValue ? pid.Value : cid.Value }
});
但是在我使用这个之后:

/admin/category/add/81/142 
return RedirectToAction("Add", "Category", new RouteValueDictionary
{
   {"id", siteid.Value},
   {"cid", pid.HasValue ? pid.Value : cid.Value }
});
我明白了:

/admin/category/add?id=81&cid=142
但是我想要原版的
/admin/category/add/81/142

以下是我的路由配置:

    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRouteLowercase(
            "Admin_LogOn",
            "Admin/{controller}/{action}/",
            defaults: new { controller = "Account", action = "LogOn" },
            constraints: null
        );

        context.MapRouteLowercase(
            "Admin_Category_List_Add",
            "Admin/{controller}/{action}/{id}/{cid}/{pid}",
            defaults:
                new
                {
                    controller = "Category",
                    action = "Create",
                    id = UrlParameter.Optional,
                    cid = UrlParameter.Optional,
                    pid = UrlParameter.Optional
                },
            constraints: null
        );


        context.MapRouteLowercase(
          "Admin_TwoParameters",
          "Admin/{controller}/{action}/{id}/{cid}",
          defaults: new { controller = "Manager", action = "Index", id = UrlParameter.Optional, cid = UrlParameter.Optional },
          constraints: null
      );


        context.MapRouteLowercase(
            "Admin_default",
            "Admin/{controller}/{action}/{id}",
            defaults: new { controller = "Manager", action = "Index", id = UrlParameter.Optional },
            constraints: null
        );
    }
要保留该格式,可以执行以下操作:

return Redirect(Url.Action("Add", "Category") + "/" + siteid.Value + "/" + (pid.HasValue ? pid.Value : cid.Value));
或者如果您更喜欢concat字符串(我更喜欢第一个):


请告诉我,我可以做更一般的行为吗,比如实现自定义路由或其他什么?不是自定义路由,而是使用它将所需的url格式映射到适当的控制器和方法<代码>Url.Action已经是一种“常规行为”,并且将
RouteValue
传递给它。只有它才能真正为您提供键值对(例如id=81)。但与我建议的解决方案相比,这是你能去的最安全的——这是对你问题的一个相当好的回答。另一种方法是,除了Url.Action提供的内容外,还可以将(动态)对象传递给一个方法,该方法将为您构建字符串。