MVC 4从基本路线中删除“home”

时间:2012-10-10 21:05:40

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

基本上我想这样做: http://website.com/Home/About

显示为: http://website.com/About

显示在网址中的“主页”控制器会使网址更长,供用户阅读。

我尝试执行以下操作:

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

有人可以帮帮我吗?

3 个答案:

答案 0 :(得分:52)

尝试这样的事情:

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

    routes.MapRoute(
        "OnlyAction",
        "{action}",
        new { controller = "Home", action = "Index" } 
    );

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

答案 1 :(得分:8)

试试这个。它还会使您的网址小写。

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

        routes.LowercaseUrls = true;

        routes.MapMvcAttributeRoutes();

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

在您的家庭控制器中:

    [Route("About")]
    public ActionResult About()
    {
        return View();
    }

答案 2 :(得分:2)

第1步: 创建路线约束。

public class RootRouteConstraint<T> : IRouteConstraint
    {
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            var rootMethodNames = typeof(T).GetMethods().Select(x => x.Name.ToLower());
            return rootMethodNames.Contains(values["action"].ToString().ToLower());
        }
    }

第2步:
在默认映射上方添加新路由映射,该映射使用我们刚创建的路由约束。泛型参数应该是您计划用作“根”控制器的控制器类。

routes.MapRoute(
                "Root",
                "{action}",
                new {controller = "Home", action = "Index", id = UrlParameter.Optional},
                new {isMethodInHomeController = new RootRouteConstraint<HomeController>()});




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

现在您应该能够访问您的家庭控制器方法,如下所示: example.com/about, example.com/contact

  

这只会影响HomeController。 Alll其他控制器将具有默认路由功能。