不积跬步,无以至千里;不积小流,无以成江海。

Dean's blog

  • Join Us on Facebook!
  • Follow Us on Twitter!
  • LinkedIn
  • Subcribe to Our RSS Feed

ASP.NET MVC 使用复杂类型踩坑

前天晚上花时间做一个用于售前使用的埋点系统原型,其中涉及两个主要的接口,在完成前端数据收集,第一个接口也顺利调试后,原以为可以快速调整完第二个接口,就可以收工的时候,结果发现第二个接口一直接收不以参数。

经过两个接口的对比,两个接口都使用的是复杂类型参数,都使用的[HttpGet]标记,并无特别区别。两个接口的定义如下:

第一个接口

        /// <summary>
        /// 保存实体数据(新增)
        /// <summary>
        /// <returns></returns>
        [HttpGet]
        public ActionResult Browse(PageModel.Browse browse)
        {
            var entity = new Traffic_PageEntity {
                //.....
            };
            pageIBLL.SaveEntity(entity);
            return Success("保存成功!");
        }

第二个接口

        /// <summary>
        /// 记录用户操作
        /// </summary>
        [HttpGet]
        public ActionResult Do(ActionModel.Do action)
        {
            var entity = new Traffic_ActionEntity
            {
                //.......
            };
            actionIBLL.SaveEntity(null, entity);
            return Success("保存成功!");
        }

两个接口的定义并没有特殊区别。在毫无头绪的时候,一顿 baidu也没有结果的情况下,只能对接口的定义做测试:

更改接口的方法名 失败
更改接口参数类型名称 失败
更改接口参数名称 成功

结果发现,更改参数名称后,可以正常接收参数了。

后来经过测试,如果参数使用action、controller作为参数名称,都会导致接收不到参数,而常用于定义路由的area、id则没有这个问题。

 

不允许评论
粤ICP备17049187号-1