|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
那做企业软件是不是最好用J2EE?比来将一个项目从ASP.NETMVC3晋级至方才公布的ASP.NETMVC5.1,晋级后发明一个ajax哀求呈现了500毛病,日记中纪录的具体非常信息以下:
- System.ArgumentException:已增加了具有不异键的项。(Anitemwiththesamekeyhasalreadybeenadded)在System.Collections.Generic.Dictionary`2.Insert(TKeykey,TValuevalue,Booleanadd)在System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionarybackingStore,Stringprefix,Objectvalue)在System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionarybackingStore,Stringprefix,Objectvalue)在System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContextcontrollerContext)在System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContextcontrollerContext)在System.Web.Mvc.ControllerBase.get_ValueProvider()在System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContextcontrollerContext,ParameterDescriptorparameterDescriptor)在System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContextcontrollerContext,ActionDescriptoractionDescriptor)在System.Web.Mvc.Async.AsyncControllerActionInvoker.c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallbackasyncCallback,ObjectasyncState)在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallbackcallback,Objectstate,Int32timeout)在System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallbackcallback,Objectstate,BeginInvokeDelegatebeginDelegate,EndInvokeDelegate`1endDelegate,Objecttag,Int32timeout)在System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContextcontrollerContext,StringactionName,AsyncCallbackcallback,Objectstate)
复制代码
固然成绩是因为晋级至MVC5.1引发的,但本着“碰到成绩,先嫌疑本人”的准绳,反省了一下代码,居然在js代码中发明了一个存在已久的初级毛病:
- varpagingBuider={"PageIndex":1};functionbuildPaging(pageIndex){pagingBuider.pageIndex=pageIndex;$.ajax({data:JSON.stringify(pagingBuider),contentType:application/json;charset=utf-8});}
复制代码
PageIndex在赋值时写成了pageIndex(第1个字母年夜写P写成了小写p),在js中开首字母小写也是标准写法,事先多是直觉性地写出来的,以是这个初级毛病无可非议。
/*这时候你大概不由要问:为何本人给本人谋事,开首字母用年夜写呢?哎,我也有我的心事,这段js代码是在服务端依据C#对象的属性天生的,C#的标准是开首字母年夜写*/
因为如许一个初级毛病,在ajax哀求时发送给服务真个json字符串酿成了如许:- {"PageIndex":1,"pageIndex":2}
复制代码 这时候找茬的干劲一涌而出,一个年夜年夜的问号出现在长远。。。
为何ASP.NETMVC3能包涵这个毛病,而且失掉准确的值(PageIndex=2),而ASP.NETMVC5.1却不克不及呢?是MVC5.1更松散了仍是气度更局促了?
猎奇心的使令下,实验在ASP.NETMVC的开源代码中一探求竟。
- 用git签出ASP.NETMVC的源代码——https://git01.codeplex.com/aspnetwebstack
- 用VS2013翻开办理计划,在办理计划办理器中搜刮到JsonValueProviderFactory
在AddToBackingStore办法中找到了非常的激发点(最初1行代码backingStore.Add(prefix,value)):
- privatestaticvoidAddToBackingStore(EntryLimitedDictionarybackingStore,stringprefix,objectvalue){IDictionary<string,object>d=valueasIDictionary<string,object>;if(d!=null
复制代码 前天傍晚我发表了《net网页编程的跨平台就是一句谎言。》,原本就是周末闲来无事,发表一篇略带争议性的博文让大家都来吵吵架,发表自己的看法,根本就没想着谁把谁打倒,一个行业或者是技术阵营是无法用短期口水仗打到对手的。 |
|