我遇到了MVC 4的问题,我猜这是非常微不足道的事情,但是在最后一天它一直困扰着我,我似乎无法弄明白。
我有这个网址:
http://www.example.com/my-dashed-url
我有一个名为:
的控制器public class MyDashedUrlController: Controller
{
}
我只有两条这样的路线:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("my-dashed-url",
"my-dashed-url/{action}",
new { controller = "MyDashedUrl", action = "Index" });
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home",
action = "Index",
id = UrlParameter.Optional }
);
我到达指数就好了。但是,当我这样做时:
public ActionResult Index()
{
if (NoUserIsLoggedOn)
return RedirectToAction("Logon", "MyDashedUrl");
return View();
}
public ActionResult Logon()
{
Contact c = GetContact();
return View(c);
}
它没有正确地将我重定向到“登录”操作。 它应该将我重定向到:
http://www.example.com/my-dashed-url/logon
但它尝试将我重定向到:
http://www.example.com/logon
...不起作用(404 Not Found)
我错过了什么。谁能发现它?如果有人需要更多信息,请告诉我。
而且每个RedirectToAction都在这个控制器中执行相同的操作。 Html.BeginForm(“Logon”,“MyDashedUrl”)也会生成: http://www.example.com/logon
我想它必须对我定义的路线做一些事情,但我找不到有问题的路线,因为它们都是一样的。如果我禁用除MVC中的默认路由以外的所有路由,问题仍然是相同的
答案 0 :(得分:1)
确保您已声明此自定义路线之前是默认路线:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"my-dashed-url",
"my-dashed-url/{action}",
new { controller = "MyDashedUrl", action = "Index" }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
请记住,路线按您声明的顺序进行评估。因此将使用匹配请求的第一个路由。如果在默认路由之后声明自定义路由,则它是与请求匹配的默认路由。