C# Asp.net MVC4强制路由参数
我有一个这样的路线图C# Asp.net MVC4强制路由参数,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我有一个这样的路线图 public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/
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 = "Home", action = "Index"}
);
}
}
但当我尝试使用“”时。它正在获取下面的错误。我试图实现的是,我想使id参数成为必需的。如果他们在url中没有id参数,它不应该命中路由,应该显示404。我知道我们可以通过空检查控制器中的参数来实现这一点。有没有办法在route config本身中进行管理
路由表中没有与提供的值匹配的路由
异常详细信息:System.InvalidOperationException:路由表中没有与提供的值匹配的路由
您应该在web.confing中处理此问题,而不是在路由中
<customErrors mode="On" defaultRedirect="/error/default">
<error statusCode="403" redirect="/error/restricted"/>
<error statusCode="404" redirect="/Default/DefaultRoute"/>
<error statusCode="500" redirect="/error/problem"/>
</customErrors>
如果我理解正确,您希望向管线添加约束
constraints: new { id = @"([0-9]+)" }
这意味着只有当id为数字时,路由才会匹配,这是必需的
全文:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index"},
constraints: new { id = @"([0-9]+)" }
);
请注意,您在问题中给出的路线应该与您当前的规则相匹配,因此我会仔细检查您的控制器、操作和拼写,以防在某个地方出现拼写错误。您可以参考以下帖子: 及
我尝试了此方法,但得到了相同的错误,当我尝试访问时,我猜该url有问题,请尝试编写一个简单的测试来验证您的路由: