ASP.NET MVC 3 ActionDescriptorのExtractParameterFromDictionaryタイプが一致しません

5854 ワード

開発者は、同じ機能が開発サーバが正常で、テストサーバが一定の操作条件を満たした後に一部Actionのmodel bindが失敗したことを反映し、その後、アプリケーションプールが再起動するまで操作して正常に戻ります.例外ログを表示するには、次の手順に従います.
Exception information: 
    Exception type: ArgumentException 
    Exception message: The parameters dictionary contains an invalid entry for parameter 'privilegeCode' for method 'System.Web.Mvc.JsonResult GetPrivilege(System.Collections.Generic.List`1[System.String], System.String)' in 'PerssionController'. The dictionary contains a value of type 'System.Collections.Generic.List`1[System.Web.Mvc.SelectListItem]', but the parameter requires a value of type 'System.Collections.Generic.List`1[System.String]'.
Parameter name: parameters
   at System.Web.Mvc.ActionDescriptor.ExtractParameterFromDictionary(ParameterInfo parameterInfo, IDictionary`2 parameters, MethodInfo methodInfo)
   at System.Web.Mvc.ReflectedActionDescriptor.<>c__DisplayClass1.<Execute>b__0(ParameterInfo parameterInfo)
   at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)
   at System.Linq.Enumerable.ToArray[TSource](IEnumerable`1 source)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.<InvokeActionMethodWithFilters>b__14()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
   at System.Web.Mvc.Controller.ExecuteCore()
   at System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)
   at System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)
   at System.Web.Mvc.MvcHandler.<>c__DisplayClass6.<>c__DisplayClassb.<BeginProcessRequest>b__5()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
   at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
   at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
   at System.Web.Mvc.MvcHandler.<>c__DisplayClasse.<EndProcessRequest>b__d()
   at System.Web.Mvc.SecurityUtil.<GetCallInAppTrustThunk>b__0(Action f)
   at System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)
   at System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)
   at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

PerssionControllerのGetPrivilege関数には文字列のリストが必要ですが、ActionDescriptorがパラメータ辞書から抽出して返したときの発見タイプはSelectListItemリストです.まず、いずれかの機能でコミットされたデータをFiddler 2で確認して問題なく、WinDbgでInvokeAction実行プロセスを追跡することにします.開発者はまた、テストサーバに問題があるだけで、ASPと疑っていると反映した.NET MVC 3バージョンの問題、Systemをコピーします.Web.Mvc.dllはBinディレクトリの下にありますが、問題は依然として発生しています.WinDbgのlmvで2台のサーバにロードされたSystemを表示します.Web.Mvc.dll、正常に動作しているバージョンは3.0.20105.0、エラーは3.0.11209.0です.AspNetMVC 3 ToolsUpdateSetupをインストールして問題を解決します.