[英]Asp.net MVC4 mandatory route parameter
我有一个这样的RouteConfig
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"}
);
}
}
但是当我尝试使用“ http://example.com/controllername/action/166699406 ”时。 它得到下面的错误。 我想要实现的是,我想使id参数成为必需参数。 如果他们在网址中没有id参数,则不应点击路由并显示404。我知道我们可以通过在控制器中对参数进行空检查来实现此目的。 有什么办法可以在路由配置本身中进行管理。
路由表中没有路由与提供的值匹配。
异常详细信息: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]+)" }
);
请注意,您在问题中给出的路线应与您当前使用的规则相匹配,因此我会仔细检查您的控制器,动作和拼写,以防万一某个地方有错字。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.