基本上我想这样做: http://website.com/Home/About
显示在网址中的“主页”控制器会使网址更长,供用户阅读。
我尝试执行以下操作:
routes.MapRoute(
name: "About",
url: "",
defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional }
);
有人可以帮帮我吗?
答案 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其他控制器将具有默认路由功能。