默认路由未重定向到mvc中的预期页面

本文关键字:mvc 路由 重定向 默认 | 更新日期: 2023-09-27 18:28:06

我有一个HomeController,其中有两个ActionResults,即IndexProjects。现在我的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

默认路由未重定向到mvc中的预期页面

注册路由时,请将特定的路由定义放在默认路由定义之前路线注册的顺序很重要

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.csRegisterRoutes方法中调用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
}