默认路由未重定向到mvc中的预期页面
本文关键字:mvc 路由 重定向 默认 | 更新日期: 2023-09-27 18:28:06
我有一个HomeController
,其中有两个ActionResults
,即Index
和Projects
。现在我的RouteConfig.cs
添加了以下路线:
routes.MapRoute(
name: "Default_1",//Changed this to some other name
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",//Made this name as Default
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Projects", id = UrlParameter.Optional }
);
因此,根据我所期望的上述配置,默认情况下,用户将重定向到/Home/Projects
。但它再次重定向到Index
操作为什么不重定向到Projects
操作?我们这里不能有多条路线吗?是否将Default
名称视为默认url
注册路由时,请将特定的路由定义放在默认路由定义之前路线注册的顺序很重要。
routes.MapRoute(
name: "Project",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Projects", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
使用此配置,任何请求都将重定向到您的Home/Projects
,因为url模式仍然是通用模式({controller}/{action}/{id}
)。所以我猜你的意思是这样的。
routes.MapRoute(
name: "Project",
url: "projects/{id}",
defaults: new { controller = "Home", action = "Projects", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
这将向Home/Projects
发送请求http://yourSite.com/Projects
或者,您可以使用属性路由在"项目"控制器中定义此路由模式。要启用属性路由,可以在RouteConfig.cs
的RegisterRoutes
方法中调用MapMvcAttributeRoutes
方法。您仍将保留默认路线定义。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
在您的项目中控制器
[Route("Projects/{id?}")]
public ActionResult Index(int? id)
{
//check id value and return something
}