如何将ASP.NET MVC中About控制器的Index方法URL改为/about-us?
修改ASP.NET MVC控制器路由为about-us的解决方案
嘿,这个需求很常见,我给你两种简单靠谱的实现方式,按需选就行:
方法一:用路由属性(Attribute Routing)(推荐)
这种方式最直观,直接在控制器或者Action上标记路由规则就行,适合MVC 5及以上版本:
- 先确保路由属性已启用:打开
App_Start/RouteConfig.cs,确认里面有这行代码(如果没有就加上):
routes.MapMvcAttributeRoutes();
- 然后修改你的About控制器:
如果只想给Index方法设置about-us路由,直接在方法上加特性:
public class AboutController : Controller { // 指定访问URL为about-us [Route("about-us")] public ActionResult Index() { return View(); } }
要是你的About控制器还有其他Action,想给整个控制器加统一前缀,比如about-us作为根,其他Action在后面拼接,可以这么写:
// 给控制器设置路由前缀 [RoutePrefix("about-us")] public class AboutController : Controller { // 空路由对应about-us(也就是Index方法) [Route("")] public ActionResult Index() { return View(); } // 这个Action的访问URL就是about-us/contact [Route("contact")] public ActionResult Contact() { return View(); } }
方法二:修改全局路由配置
如果不想用属性路由,直接修改全局路由表也可以:
打开App_Start/RouteConfig.cs,在默认路由前面添加一条自定义路由(路由匹配是按顺序来的,所以要放前面):
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 新增自定义路由,匹配about-us到About/Index routes.MapRoute( name: "AboutUs", url: "about-us", defaults: new { controller = "About", action = "Index" } ); // 原来的默认路由保留 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }
注意事项
- 改完之后记得重启你的应用,不然路由不会生效
- 默认情况下,原来的
/about还是能访问的,如果想禁用原来的URL,可以根据你的需求调整路由规则(比如移除默认路由里的控制器匹配,或者用属性路由覆盖)
内容的提问来源于stack exchange,提问作者Manoj Deshwal
相关产品推荐
相关产品推荐

