ArgumentException: 已添加了具有相同键的项。

时间:2021-04-22 23:02:48

此问题出现在asp.net mvc 5 中,前端向后端请求数据,方法的参数是模型,比如 Add(Student m), 结果浏览器显示的状态是500并返回错误提示ArgumentException,如标题,堆栈信息就不贴了,网上可以搜到很多这个问题的解决办法。

这个问题出现的原因中,除了前端传的参数中含有两个以上大小写不同的参数名,还有就是模型定义问题,可能有两个大小写不同的属性。以上均是因为大小写不同的参数名重复添加到字典里面,才会报这个错。

解决问题思路是:

第一、看完堆栈信息,不是自己代码出的错,直接调试源码,此法万能,没有调试不了的bug,就怕断点断在哪里都不知道,且对小白极不友好,仅适合高端玩家,不推荐。

第二、用尝试,模仿的方式去试探是定位是哪一块的原因。比如新增一个方法名不同,参数一样的方法尝试请求(用这个方法解决了前端元素绑定点击事件报 search 方法不存在的问题 onclick=“search();”,没深究,search可能是关键字什么的,改个名字就好了)。还有用同样方法名,改变参数再尝试请求,这时会发现不用那个模型作为参数就不报错了,那么问题就出在模型上了,这时候先把问题记下来,先改用常规的参数接收写法,多写几个参数,保证不在报错,之后再研究是模型哪里的问题。这类办法需要有相当的经验,才能想到,往哪方面尝试比较容易定位问题,看个人功底。

第三、回滚。问题总是突然出现的,很多同学应该都经历过,之前明明还好好地,怎么上个厕所回来就这样了。别急先保存一份现在的代码,然后一点点撤销最后面改的代码,每撤销一次就运行测试一次,撤销到上一次提交代码之前,你总能发现是改了哪一行引起的问题,找到之后,再看看什么 是写法不对还是什么,或者换个写法,换个姿势什么的就好了。此类办法也是万能的,不管有没有相关经验,都可以手动回滚到以前正确的时候,以此来定位然后解决问题。

总结:以上思路适合各种语言各种环境出现问题时可以参考的思路,使得在没有相关知识经验的时候也能解决问题。其实不是我们解决不了问题,是很多同学碰到不熟悉的问题时,通常都会一脸懵逼不知所措无从下手,还有习惯了把问题丢给别人的就想也不想直接问人家,这个问题怎么办,代码也不贴,问题虽然解决了但是却得不到提高,打了怪也不涨经验。