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

时间:2014-06-25 17:25:47

标签: asp.net-mvc asp.net-mvc-routing url-routing

我有两个控制器,HomeController和ResourcesController。 我想在HomeController上请求操作时隐藏Home / from url,但对于ResourcesController(或任何其他控件),我想将控制器名称保留在url中。 例如。 / Home / Products将是/ 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 }
);

它可以按预期用于家庭控制器但是对于资源控制器我得到了#34; 404 ...无法找到资源"

1 个答案:

答案 0 :(得分:1)

一种可能的方法是可以映射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
    );