Asp.net mvc 从mvc url中隐藏一个控制器名称,显示其他控制器名称

Asp.net mvc 从mvc url中隐藏一个控制器名称,显示其他控制器名称,asp.net-mvc,asp.net-mvc-routing,url-routing,Asp.net Mvc,Asp.net Mvc Routing,Url Routing,我有两个控制器,HomeController和ResourcesController。 当请求对HomeController执行操作时,我想在url中隐藏Home/from,但对于ResourcesController(或任何其他controlelr),我想在url中保留控制器名称。 例如/家/产品将是/Produtcs,但是/Resources/Banana应该留下/Resources/Banana 以下是我的路线: routes.IgnoreRoute("{resource}.axd/{*p

我有两个控制器,HomeController和ResourcesController。 当请求对HomeController执行操作时,我想在url中隐藏Home/from,但对于ResourcesController(或任何其他controlelr),我想在url中保留控制器名称。 例如/家/产品将是/Produtcs,但是/Resources/Banana应该留下/Resources/Banana

以下是我的路线:

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

routes.MapRoute(
    name: "SpecificRoute",
        url: "{action}/{id}", 
        defaults: new { controller = "Home", action = "Home", id = UrlParameter.Optional });

routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Home", id = UrlParameter.Optional }
);

对于home controller,它可以按预期工作,但是对于resources controller,我得到“404…找不到资源”

一种可能的方法是您可以在global.asax文件中映射所有主页操作。请参见下面的示例代码

e、 g


一篇关于这一点的老博文来自一位伟大的人物:
    routes.MapRoute(
        "ProdutcsRoute", // Route name
        "Produtcs/{id}", // URL with parameters
        new { controller = "Home", action = "Produtcs", id = UrlParameter.Optional } // Parameter defaults
    );

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

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