Redirect 奇怪的重定向行为
我想知道如何在ASP.NET MVC-4中保留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
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提供的内容外,还可以将(动态)对象传递给一个方法,该方法将为您构建字符串。