代码之家  ›  专栏  ›  技术社区  ›  Mist

ASP。NETMVC:引发异常的路由问题

  •  1
  • Mist  · 技术社区  · 7 年前

    我有一个测试控制器,其中我有一个索引操作,可以接受 custid 作为论据。

    这就是我的控制器的外观

    public class TestController : Controller
    {
        // GET: Test
        public ActionResult Index(int custid)
        {
            return View();
        }
    }
    

    我在route中添加了一条额外的路由语句。配置文件。

    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
                name: "custom1",
                url: "{controller}/{id}",
                defaults: new { controller = "Test", action = "Index", custid = UrlParameter.Optional }
            );
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

    因此,当使用类似url的url访问测试控制器操作时 本地主机:50675/test/101 然后是错误。错误消息说

    参数字典包含参数“custid”的空条目 属于“不可为空的类型”系统。Int32'表示方法 “系统。网状物Mvc。ActionResult索引(Int32)'in “韦巴皮克拉德。控制器。测试控制器'。必须输入可选参数 引用类型、可为空的类型或可声明为可选类型 参数参数名称:参数

    但当使用类似url的url访问测试控制器操作时 本地主机:50675/测试?custid=101 然后就不会出错了。

    所以我不明白代码中有什么错误。

    我需要做的是,我可以发布这个url http://localhost:50675/test/101 这应该管用。请引导我。谢谢

    1 回复  |  直到 7 年前
        1
  •  2
  •   user3559349    7 年前

    您的路线定义需要包含一段 custid (不是 id )以匹配参数的名称。路由定义还应包含控制器的名称,以使其唯一

    routes.MapRoute(
        name: "custom1",
        url: "Test/{custid}", // modify
        defaults: new { controller = "Test", action = "Index"}
    );
    

    请注意,您还可以删除 custid = UrlParameter.Optional 因为你不希望它是可选的