0

我在使用 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 都做同样的事情。A Html.BeginForm("Logon", "MyDashedUrl") 也会生成: http ://www.example.com/logon

我想这与我定义的路线有关,但我找不到有问题的路线,因为它们都是一样的。如果我禁用除了 MVC 的默认路由之外的所有路由,问题仍然存在

4

1 回答 1

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
    );
}

请记住,路由是按照您声明它们的顺序进行评估的。因此将使用与请求匹配的第一个路由。如果您在默认路由之后声明自定义路由,则默认路由将匹配请求。

于 2013-10-10T13:27:46.040 回答