前天晚上花时间做一个用于售前使用的埋点系统原型,其中涉及两个主要的接口,在完成前端数据收集,第一个接口也顺利调试后,原以为可以快速调整完第二个接口,就可以收工的时候,结果发现第二个接口一直接收不以参数。
经过两个接口的对比,两个接口都使用的是复杂类型参数,都使用的[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则没有这个问题。