使用RegisterRoutes路由不正确

时间:2013-03-06 12:40:39

标签: asp.net-mvc

为什么我打电话:

http://localhost:55058/support/Faqs

我明白了:

http://localhost:55058/Products/Faqs/Faq

使用以下RegisterRoutes实现?我怎么才能得到:

http://localhost:55058/Support/Faqs/Faq

感谢。

public class SupportController : Controller
{
    public ActionResult FAQs()
    {
        return RedirectToAction("Faq", "Faqs");
    }
}

public static void RegisterRoutes(RouteCollection routes)
{

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.IgnoreRoute("{filename}.html|js|css|gif|jpg|jpeg|png|swf");

        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
        routes.IgnoreRoute("{resource}.html/{*pathInfo}");

        routes.MapRoute(
            "Products", // Route name
            "Products/{controller}/{action}", // URL with parameters
            new { controller = "ProductName", action = "Index" } // Parameter defaults
            );

        routes.MapRoute(
         "Support", // Route name
         "Support/{controller}/{action}", // URL with parameters
         new { controller = "Support", action = "Index" } // Parameter defaults
         );

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new {controller = "Home", action = "Index", id = UrlParameter.Optional} // Parameter defaults
            );

}

1 个答案:

答案 0 :(得分:2)

没有更多的数据很难说 - 但看起来你有点尝试使用区域,但实际上并没有使用区域?

正在发生的事情是RedirectToAction("Faq", "Faqs")与您的所有路线相匹配 - 所以它会选择第一个路线,在这种情况下为Products

"Products/{controller}/{action}""Support/{controller}/{action}"路线之间有什么区别?他们来自不同的地方吗?您将它们发送到同一个控制器,不管URL的起点是什么,都会发生相同的操作 - 这看起来很混乱。

如果转到/ products / ...您应该获得与/ support / ...不同的结果,您应该查看MVC Areas

如果他们应该得到相同的结果这就是你现在所拥有的 - 也许你应该考虑删除这些网址并使用默认值?

以下是有关领域的其他资源:

  1. 来自MSDN
  2. 来自Asp.net
  3. 来自Stack Overflow
  4. 编辑来自您的评论:

    路由:http://localhost:55058/Products/ProductName/Download

    像这样更新您的路线:

     routes.MapRoute(
                "Products", // Route name
                "Products/ProductName/{action}", // URL with parameters
                new { controller = "ProductName", action = "Index" } // Parameter defaults
                );
    
            routes.MapRoute(
             "Support", // Route name
             "Support/{controller}/{action}", // URL with parameters
             new { controller = "Support", action = "Index" } // Parameter defaults
             );