【问题标题】:Custom Route to remove controller name from Areas从区域中删除控制器名称的自定义路由
【发布时间】:2020-11-29 16:36:23
【问题描述】:

我想从区域的 URL 中删除控制器名称

http://example.com/AreasName/my-page

我试试这个

 context.MapRoute("AreasName_default", "AreasName/{action}/{id}", new {action = "Index", id = UrlParameter.Optional });

但出现错误:

"匹配的路由不包含'controller'路由值,它 是必需的”。

【问题讨论】:

    标签: c# asp.net-mvc routes asp.net-mvc-routing


    【解决方案1】:

    尽量使用区域的属性路由,而不是调用MapRoute()

    [RouteArea("AreasName")]   
    [Route("{action}/{id}")]
    
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    
        // url: /AreasName/about/id
        public ActionResult About(string id)
        {
            ViewBag.Message = "Message...";
    
            return View();
        }
        ...
    }
    

    要启用属性路由,需要在 RouteConfig.cs 文件的 RegisterRoutes() 方法中添加对 routes.MapMvcAttributeRoutes() 方法的调用:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        // Enabling attribute routing. Recommend to put attribute routes in the route table before traditional routes.
        routes.MapMvcAttributeRoutes();
    
        // Additional calls
        routes.MapRoute(...)
    }
    

    【讨论】:

    • 完美工作!将此行添加到 RouteConfig.cs 后:“AreaRegistration.RegisterAllAreas();”
    • @nawaz uddin:当我创建一个新项目时,Visual Studio 模板已经包含 AreaRegistration.RegisterAllAreas(); 作为 Application_Start() 方法的第一行。
    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    相关资源
    最近更新 更多