我最初的解决方案是拥有这些路线:
//site.com/rathboma - maps to user details for rathboma
routes.MapRoute("Users", "{id}", new { controller = "Users", action = "Details" });
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "oneday" } // Parameter defaults
);
这很好用,直到我尝试在我的'Links'控制器中执行以下操作:
public ActionResult Details(string id)
{
int newId;
if (!int.TryParse(id, out newId))
return RedirectToAction("Index");
WebLink results = Service.GetWebLink(newId, 5);
if (results == null)
return RedirectToAction("Index");
return View(results);
}
这些RedirectToAction方法尝试将浏览器返回http://site.com/Users(我确实有一个用户控制器),而不是直接转到http://site.com/Links/index
为什么会这样?
我应该如何组织路线以使其正常工作?
如果必须的话,我很高兴牺牲http://site.com/links并转移到http://site.com/links/index。但是我该如何强制执行呢?
感谢所有人的帮助
修改
我知道造成这种情况的原因是,它正在尝试重定向到http://site.com/links(索引页面),但链接被选为用户名并重定向到/ users / details,当它找不到用户时'链接'它试图重定向到映射到/ users的UsersController Index操作,并且循环继续('users'不是它可以找到的用户,因此无限重定向)。
所以我想我的子问题是:如何让mvc始终使用/ links / index而不是仅仅使用/ links作为索引页面?
答案 0 :(得分:2)
尝试在用户路线前添加此路线:
routes.MapRoute("Links",
"{controller}/{id}",
new { controller = "Links", action = "Details" });
这应该适用于
&安培;
答案 1 :(得分:0)
我相信在您的链接控制器中将RedirectToAction("Index");
更改为RedirectToAction("Index", "Links");
可以解决问题,而无需更改路由。
问题是你有两条非常贪婪的路线。我要做的是将默认路线分解为不那么贪婪的路线,如下所示:
routes.MapRoute("Links",
"Links/{id}",
new { controller = "Links", action = "Index" });
routes.MapRoute("Users",
"{id}",
new { controller = "Users", action = "Details" });
routes.MapRoute("Default",
"",
new { controller = "Home", action = "Index" });
使网址如下:
site.com/links/5 - hits the Links controller site.com/name - hits the Users controller site.com/ - hits the home controller