繁体   English   中英

Asp.net MVC4强制路由参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM