1

为什么如果我打电话:

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

}
4

1 回答 1

2

如果没有更多数据,很难说 - 但看起来您是在尝试使用区域,但实际上并未使用区域?

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

"Products/{controller}/{action}""Support/{controller}/{action}"路线有什么区别?他们来自不同的地方吗?无论 URL 以什么开头,您都将它们发送到同一个控制器,相同的操作 - 这似乎令人困惑。

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

如果他们应该得到与您现在所拥有的结果相同的结果- 也许您应该考虑删除这些 url 并只使用默认值?

以下是有关领域的一些额外资源:

  1. 来自MSDN
  2. 来自Asp.net
  3. 堆栈溢出

编辑根据您的评论:

路由: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
         );
于 2013-03-06T13:09:48.367 回答