多控制器不同区域的MVC路由我的解决方案结构如下:区域-游戏-控制器-视图等-电影-控制器-MoviesController.cs-MoviesCalendarController。cs-MovieSearchController.cs-Views等现在我希望能够做到这一点:导航到https://localhost/Movies/并点击MoviesController.cs的索引导航到:https://localhost/Movies/Calendar/和MovieCalendarController.cs的命中索引最后导航到https://localhost/Movies/Search/并命中MovieSearchController.cs的索引我试过但没有用(路由表中的路由与提供的值不匹配。获取Norouteinthe路由表与提供的值匹配。)错误:MovieAreaRegistration.cspublicoverridevoidRegisterArea(AreaRegistrationContextcontext){context.MapRoute("Movies_default","Movies/{action}/{id}",new{controller="Movies",action="Index",id=UrlParameter.Optional});context.MapRoute("Calendar_default","Movies/Calendar/",new{controller="MovieCalendar",action="Index",id=UrlParameter.Optional});上下文.MapRoute("Search_default","Movies/Search/{action}/{id}",new{controller="MovieSearch",action="Index",id=UrlParameter.Optional});抱歉,我是区域和路由新手的更新在使用属性路由后我遇到了这个问题:发现多个控制器类型匹配URL如果多个控制器上的属性路由与请求的URL匹配,就会发生这种情况请求找到了以下匹配的控制器类型:MovieCalendar.UI.Areas.Movies.Controllers.MovieCalendarControllerMovieCalendar.UI.Areas.Movies.Controllers.MoviesController电影控制器[RouteArea("Movies")][Route("{action}")]publicclassMoviesController:BaseController{}CalendarController[RouteArea("Movies")][RoutePrefix("Calendar")][Route("{action=Index}")]publicclassMovieCalendarController:BaseController{}当访问URLhttp://localhost/Movies/Calendar时,发生这种情况,希望它能带我到MovieCalendarControllerIndex操作方法。我明白为什么它会抱怨,因为MovieController可能有一个名为Calendar的ActionMethod(它没有)。使用属性路由可能会更好。它会让你这样做:}}publicclassMovieCalendarController:Controller{[Route("Movies/Calendar")]publicActionResultIndex(){returnthis.View();然后你可以摆脱当前的路线图并用这个初始化你的路线:RouteTable.Routes.MapMvcAttributeRoutes();有关属性路由的更多信息,请参阅此处。UPDATE[RouteArea("Movies")][Route("{action}")]publicclassMoviesController:BaseController{}此路由将匹配以Movies/开头的url,后跟任何字符串,包括Calendar。所以这条路线适用于:[RouteArea("Movies")][RoutePrefix("Calendar")][Route("{action=Index}")]publicclassMovieCalendarController:BaseController{}使用控制器的命名约定,约定-基于路由将是困难的。以上就是C#学习教程:MVC多控制器分区域路由共享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
