C#学习教程:如何在asp.netmvc4中将查询字符串参数转换为路由似乎让ASP.NETMVC了解我的路线。我需要的路由是/blogs/student/firstname-lastnameso/blogs/student/john-doe,它们路由到博客区域,学生控制器的索引操作,它采用字符串名称参数。这是我的路线routes.MapRoute(name:"StudentBlogs",url:"blogs/student/{name}",defaults:new{controller="Student",action="Index"});我的控制器动作publicActionResultIndex(stringname){string[]nameparts=name.Split(newchar[]{'-'});字符串firstName=nameparts[0];字符串lastName=nameparts[1];if(nameparts.Length==2&&name!=null){//从数据库加载学生博客}returnRedirectToAction("Index","Index",new{area="Blogs"});}但它似乎并没有解决......它不适用于/blogs/student/?name=firstname-lastname,但不是我想要的路径,即/blogs/student/firstname-lastname。任何有关如何解决此问题的建议将不胜感激。我的RouteConfigpublicclassRouteConfig{publicstaticvoidRegisterRoutes(RouteCollectionroutes){routes.IgnoreRoute("{resource}.axd/{*pathInfo}");routes.MapRoute(name:"StudentBlogs",url:"blogs/student/{name}",默认值:new{controller="Student",action="Index"},constraints:new{name=@"[a-zA-Z-]+"},命名空间:newstring[]{"IAUCollege.Areas.Blogs.Controllers"});routes.MapRoute(name:"Sitemap",url:"sitemap.xml",defaults:new{controller="XmlSiteMap",action="Index",page=0});//CmsRoute移至Gloabal.asax//校园地图路线routes.MapRoute(name:"CampusMaps",url:"locations/campusmaps",defaults:new{controller="CampusMaps",action="Index",id=UrlParameter.Optional});//核心路由routes.MapRoute(name:"Default",url:"{controller}/{action}/{id}",defaults:new{controller="Home",action="Index",id=UrlParameter.选修的});//错误路由routes.MapRoute(name:"Error",url:“错误/{status}”,默认值:new{controller="Error",action="Error404",status=UrlParameter.Optional});//为MvcSiteMapProvider站点地图添加我们的路由注册MvcSiteMapProvider.Web.Mvc.XmlSiteMapController.RegisterRoutes(routes);您必须在默认路由之前声明您的自定义路由,否则它将映射到{controller}/{action}/{id}。Global.asax通常看起来像这样:protectedvoidApplication_Start(){AreaRegistration.RegisterAllAreas();RouteConfig.RegisterRoutes(RouteTable.Routes);如果您创建了一个名为Blogs的区域,则会有一个相应的BlogsAreaRegistration.cs文件,如下所示:}}publicoverridevoidRegisterArea(AreaRegistrationContextcontext){context.MapRoute("Admin_default","Blogs/{controller}/{action}/{id}",new{action="Index",id=UrlParameter.Optional});连字符有时在路由中被视为正斜杠。当您使用路由blogs/students/john-doe时,我的猜测是它与上面使用blogs/students/john/doe的Area模式相匹配,这将导致404。将您的自定义路由添加到位于的BlogsAreaRegistration.cs文件中在路由上方的默认值中。尝试向您的路线添加参数:routes.MapRoute(name:"StudentBlogs",url:"blogs/student/{name}",defaults:new{controller="Student",action="Index",name=UrlParameter.Optional});尝试为名称参数添加约束:routes.MapRoute(name:"StudentBlogs",url:"blogs/student/{name}",defaults:new{controller="Student",action="Index"},constraints:new{名称=@"[a-zA-Z-]+"});在MVC中,破折号有点奇怪……因为它们用于解析下划线。如果这不起作用,我会删除这个答案(尽管它应该)。如果您使用像/blogs/student/12387这样的URL,您将获得无法匹配路由的额外好处。编辑:如果您有同名的控制器,则需要在每个区域的两个路由中包含命名空间。控制器在哪里并不重要……即使在不同的区域。尝试将相应的命名空间添加到处理Student控制器的每个路由。像这样:routes.MapRoute(name:"StudentBlogs",url:"blogs/student/{name}",defaults:new{controller="Student",action="Index"},namespaces:newstring[]{"网站.Areas.Blogs.Controllers"});..或者管理区域中的Website.Areas.Admin.Controllers。以上就是C#学习教程:asp.netmvc4中如何将查询字符串参数转换为路由分享,如果对你有用,还需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收藏,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
