C# 使用RouteConfig更改路径后,旧路径不起作用
我正在从事一个带有实体框架的C#ASP.NET MVC项目 我正在尝试使用C# 使用RouteConfig更改路径后,旧路径不起作用,c#,asp.net-mvc,C#,Asp.net Mvc,我正在从事一个带有实体框架的C#ASP.NET MVC项目 我正在尝试使用RouteConfig.cs 首先,代码是这样的 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute(
RouteConfig.cs
首先,代码是这样的
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
}
}
我想把url
localhost/Customer/Index
转换成localhost/Index
所以我添加了这一行代码,它成功了
routes.MapRoute(
name: "customer",
url: "customer",
defaults: new { controller = "Customer", action = "Index"}
);
接下来,我尝试将localhost/Customer/Details/2
更改为localhost/CustomerName/2
// CustomerName varies with each customer
所以我加了这个
routes.MapRoute(
name: "customerDetail",
url: "customer/{name}/{id}",
defaults: new { controller = "Customer", action = "Details", id = UrlParameter.Optional, name = UrlParameter.Optional }
);
现在,客户详细信息页面已正确加载
但是,使用此路径加载索引页会导致错误,
localhost/Customer/Index
,而localhost/Customer
不会导致错误。为什么会这样
编辑
这就是我的RouteConfig
的样子
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "customer",
url: "customer",
defaults: new { controller = "Customer", action = "Index"}
);
routes.MapRoute(
name: "customerDetail",
url: "customer/{name}/{id}",
defaults: new { controller = "Customer", action = "Details", id = UrlParameter.Optional, name = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
}
}
最后我找到了答案 正如@StephenMuecke所评论的那样
localhost/Customer/Index
匹配customerDetail
路由(并将“Index”
传递给id参数)
因此,我重新检查了我的代码,发现localhost/Customer/Details/2
中的id
字段不是可选的,我意外地将其定义为可选的,id=UrlParameter.optional
routes.MapRoute(
name: "customerDetail",
url: "customer/{name}/{id}",
defaults: new { controller = "Customer", action = "Details", name = UrlParameter.Optional }
);
完整路由配置代码:
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "customer",
url: "customer",
defaults: new { controller = "Customer", action = "Index"}
);
routes.MapRoute(
name: "customerDetail",
url: "customer/{name}/{id}",
defaults: new { controller = "Customer", action = "Details",name = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
}
}
请尝试以下代码。从现有代码中删除
id
作为UrlParameter。可选
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "customer",
url: "customer",
defaults: new { controller = "Customer", action = "Index"}
);
routes.MapRoute(
name: "customerDetail",
url: "customer/{name}/{id}",
defaults: new { controller = "Customer", action = "Details", name = UrlParameter.Optional } // Removed idas optional from existing code
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional }
);
}
}
添加路线的顺序很重要。更改后按当前状态显示RouteConfig。您可能遇到路由冲突。似乎您在RouteConfig
中定义了错误的路由顺序。最具体的路由应该位于更广泛/默认路由之上。您的第二个路由不生成localhost/Index
-它生成localhost/customer
,并且只有最后一个参数可以标记为UrlParameter。可选的localhost/customer/Index
匹配customerDetail
路由(并通过“索引”到id
参数)