Asp.net mvc 使用RegisterRoutes的路由不正确

Asp.net mvc 使用RegisterRoutes的路由不正确,asp.net-mvc,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() {

为什么我打电话:

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

}

如果没有更多的数据,这很难说——但看起来你是在尝试使用区域,而不是实际使用区域

发生的情况是,您的
重定向到操作(“Faq”、“Faq”)
与您的所有路线都匹配-因此它选择了第一条路线,在本例中是
产品

“产品/{controller}/{action}”
“支持/{controller}/{action}”
路由之间有什么区别?他们来自不同的地方吗?无论URL以什么开头,您都将它们发送到同一个控制器,相同的操作-这似乎令人困惑

如果访问/products/。。。您应该得到与/support/…不同的结果。。。你应该调查一下

如果他们应该得到<强>相同的结果>你现在有什么-也许你应该考虑删除那些URL,然后使用默认的

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

  • 根据您的评论编辑

    路由:
    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
             );
    

    如果您评论第一条“产品”路线并尝试url,会发生什么情况???它工作正常,但我甚至需要
    产品
    路线来允许
    http://localhost:55058/Products/ProductName/Intro
    URL to work我认为一切正常,只需返回重定向到操作(“Faq”、“Faq”);正在弄得一团糟。。请您写下退货内容(“测试”);而不是检查我是否正确?它以相同的方式工作,但显示的URL是
    http://localhost:55058/Products/faqs/Faq
    而不是
    http://localhost:55058/Support/faqs/Faq
    Hi Mark,是的,我正在尝试模拟区域。我将
    “Products/{controller}/{action}”
    发送到ProductNameController,将
    “Support/{controller}/{action}”
    发送到SupportController…更新了我的答案-但我对您想要的路线有点困惑。如果需要:产品/产品(控制器)/索引(操作)?-产品/产品/行动,我可以改变路线。支持/支持/行动?支持/FAQ/FAQ在这种情况下没有意义-因为您将支持/FAQ(您是否有FAQ控制器)/FAQ建议的解决方案使产品路线失败。。。我们通过以下动作将其称为
    http://localhost:55058/Products/ProductName/Gallery
    http://localhost:55058/Products/ProductName/Download
    ,等等。我已经更新了上述路线的答案-但是关于。这需要转到常见问题控制器还是支持控制器?我们有一个带有
    Faq
    操作的常见问题控制器