JsonValueProvider 从 MVC 应用程序抛出错误

2024-07-04

我们开始在日志中看到这一点,知道从哪里开始寻找问题吗?调用堆栈中没有任何内容可以帮助我们开始。

    Message :An item with the same key has already been added. at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) at 
System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean 
add) at System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value) at 
System.Web.Mvc.JsonValueProviderFactory.EntryLimitedDictionary.Add(String key, 
Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary
backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary
backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value) at 
System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext) at System.Web.Mvc.ValueProviderFactoryCollection.<>c__DisplayClassc.<GetValueProvider>b__7(ValueProviderFactory factory) at 
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at 
System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at 
System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at 
System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at 
System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext) at System.Web.Mvc.ControllerBase.get_ValueProvider() at 
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) at 
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass25.
<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) at 
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) at 
System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object 
state) at System.Web.Mvc.Controller.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) at 
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) at 
System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) at 
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) at 
System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) at 
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) at 
System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) at 
System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) at 
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) at 
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) at 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) at 
System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

当你的控制器方法接收到 json 时,DefaultModelBinder使用JsonValueProviderFactory,它使用JavaScriptSerializer反序列化 json 字符串并将名称/值对添加到传递给的字典中DictionaryValueProvider这反过来又提供了绑定的值。

您的错误是因为您的 json 包含一个具有重复属性名称的对象而引起的,例如{ name: someValue, NAME: anotherValue }那么一次name: someValue已添加到字典中,添加NAME: anotherValue由于重复(不区分大小写)键而引发异常。这是有道理的,因为一个模型不能包含两个同名的属性。

虽然最好的解决方案是追踪并纠正问题的来源'无效的'json,你可以自己写ValueProvideFactory仅绑定第一个值并忽略具有相同键的后续值。要避免重新发明轮子,请使用以下步骤:

  1. 复制源代码JsonValueProviderFactory.cs 源 代码 https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/JsonValueProviderFactory.cs进入你的项目
  2. 重命名命名空间(例如yourProject.ValueProviderFactories) 和 添加一个using System.Web.Mvc;陈述
  3. 重命名该类(例如InvalidJsonValueProviderFactory)
  4. 修改里面的以下代码private class EntryLimitedDictionary

    public void Add(string key, object value)
    {
        if (++_itemCount > _maximumDepth)
        {
            // throw new InvalidOperationException(MvcResources.JsonValueProviderFactory_RequestTooLarge);
        }
        // Add the following if block
        if (_innerDictionary.ContainsKey(key))
        {
            return;
        }
        _innerDictionary.Add(key, value);
    }
    
  5. 将以下内容添加到您的global.asax.cs file

    ValueProviderFactories.Factories.Insert(0, new yourProject.ValueProviderFactories.InvalidJsonValueProviderFactory());
    

请注意,需要先添加它,因为JsonValueProviderFactory已添加到工厂集合中。

这将阻止您的异常,但当然意味着重复的属性将被丢弃。如果获得重复项很重要,那么您可以考虑进行更多修改,以使用包含索引器的不同唯一键创建新的字典条目,例如

private int _index = 0;
....
if (_innerDictionary.ContainsKey(key))
{
    string invalidKey = string.Format("duplicates[{0}]", _index++);
    string invalidValue = string.Format("{0}|{1}", key, value);
    _innerDictionary.Add(invalidKey, invalidValue);
    return;
}

where index将从零开始并每次递增。然后你可以在方法中添加一个额外的参数string[] duplicates其中将填充重复值。至少它有助于调试问题的根源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JsonValueProvider 从 MVC 应用程序抛出错误 的相关文章

  • IMG SRC 标签和 JavaScript

    是否可以从 IMG SRC 标签调用 JavaScript 函数来获取图像 url 像这样 img src GetImage 这是使用 NET 2 0 没有 这是不可能的 至少在所有浏览器中都是不可能的 你可以这样做 img src bla
  • MVC 属性路由不起作用

    我对 MVC 框架相对较新 但我确实有一个功能正常的 Web 项目 其中带有一个利用 AttributeRouting NuGet 包 的 API 控制器 然而 我正在启动另一个项目 它只是不想遵循我输入的路线地方 控制器 public c
  • 清除 cookie、会话和 formsauth 后,Asp.net 在注销时删除服务器上的会话

    我遇到了 ASP NET 的安全问题 注销时 我想确保会话被销毁 以便有人无法使用相同的 sessionid 和 auth cookie 并编辑其中的 cookie 并且服务器仍然响应会话 FormsAuthentication SignO
  • 比较程序集名称导致不匹配:修订号

    我正在开发 ASP NET MVC4 应用程序 该应用程序在我的本地计算机上运行良好 但在应用程序服务器上不起作用并引发以下错误 无法加载文件或程序集 System Web Mvc 版本 2 0 0 0 Culture neutral Pu
  • 比较程序集名称导致不匹配:修订号

    我正在开发 ASP NET MVC4 应用程序 该应用程序在我的本地计算机上运行良好 但在应用程序服务器上不起作用并引发以下错误 无法加载文件或程序集 System Web Mvc 版本 2 0 0 0 Culture neutral Pu
  • 使用 TempData 字典会阻止 RedirectToAction 工作

    我想添加视图模型TempData为了将其传递给另一个控制器 如下所示 参考最后两行 HttpPost register public async Task
  • HttpUtility.HtmlDecode 不解码空格?

    我有这个 string test HttpUtility HtmlDecode http test com Folder1 Folder2 my 20view aspx 当我查看测试时 它仍然有 20 而不是空格 为什么它不解码这个 您正在
  • 如何手动创建简单的会员sql表?

    我正在寻找一个类似于 Aspnet regsql exe for ASP NET Membership 的工具 仅适用于 simpleMemberShip Provider 在运行时创建表为时已晚 因为客户端程序使用相同的表 UserPro
  • 修剪字符串末尾的字符串

    你好 我想删除 C 句子中的最后一个单词 这是我的查询 SELECT FROM People WHERE City City AND County County AND 我想以编程方式删除最后一个 AND 我该怎么做 谢谢 string m
  • ASP.NET 身份二元代码的最大过期时间是多少?

    我试图找出 ASP NET Identity 2 1 中两因素身份验证代码的最大值是多少 我尝试过设置以下内容 app UseTwoFactorSignInCookie DefaultAuthenticationTypes TwoFacto
  • LINQ 中的匿名类型成员声明符无效

    我有两个实体 一个是 学生 另一个是 科目 这两个实体的详细信息类似于 students id name subjects studentID subjectName passed 其中 passed 是布尔类型 现在我想查询学生姓名和他可
  • 如何更改 ASP.NET Identity 中的错误消息

    我正在尝试更改 Identity ASP NET 中的错误消息 但我不知道该怎么做 我想将错误消息更改为 登录已被接受 CreateAsync 方法应返回此错误消息 The Microsoft AspNet Identity UserMan
  • 使用 4.0 框架和 Visual Studio 2010 为 ASP Classic 构建 COM 互操作库

    在阅读了许多不同的文章后 没有找到任何特别有说服力的内容可以帮助我逐步完成整个过程 因此我来寻求帮助 场景 我的一个客户只精通以下领域的开发ASP经典版 http en wikipedia org wiki Active Server Pa
  • 如何在 Razor 视图上引用 .css 文件?

    我知道如何在 Layout cshtml 文件上设置 css 文件 但是如何在每个视图的基础上应用样式表呢 我的想法是 在 Layout cshtml 中 你有标签可以使用 但在非布局视图之一中则不然 哪里做标签去哪儿了 对于在整个站点中重
  • 如何在 C# 中创建 JSON 字符串

    我只是使用 XmlWriter 创建一些 XML 以在 HTTP 响应中发回 您将如何创建 JSON 字符串 我假设您只使用 stringbuilder 来构建 JSON 字符串 然后将您的响应格式化为 JSON Using Newtons
  • 将一个服务注入另一个服务

    我有一个 MVC 项目 它有两个服务 OrganizationService 和AgreementService 我的问题是某些组织属于组 父结构 在这种情况下 我需要获取属于其中任何组织的所有协议群组 我的 OrganizationSer
  • MemoryStream - 无法访问关闭的流

    Hi why using var sw new StreamWriter ms 回报Cannot access a closed Stream exception Memory Stream位于此代码之上 using var ms new
  • 将 HTML 表导出到 Excel JavaScript 函数添加选择文件名

    我有以下将 HTML 导出到 Excel 的函数 function generateexcel tableid var table document getElementById tableid var html table outerHT
  • 在 C# 中捕获异常

    我有一个简单的添加按钮 ADD Click 代码是 protected void Add Click object sender EventArgs e string strConnectionString ConfigurationMan
  • 我是否需要显式关闭并处置 SQLConnection?

    SqlDataReader rdr null con new SqlConnection objUtilityDAL ConnectionString using SqlCommand cmd con CreateCommand try i

随机推荐

  • 是否可以通过简单地交换一些文件来恢复 Postgres 数据库以提高速度?

    这是一个一般的 Postgres 备份和恢复方法问题 基于以下非生产服务器 即本地测试服务器 的用例 我有一个大约 20gb 的数据库 在测试 php 脚本期间我会破坏它 这将导致需要经常删除它并重新创建它 运行转储的 SQL 来恢复它需要
  • 如何检查Python的坐标是否在特定区域内

    可以说我有两种坐标 第一个称为center point第二个叫test point 我想知道是否test point坐标在内部靠近或不靠近center point通过应用协调radius临界点 如果我写的话 就像 center point
  • New Relic Android 代理在 gradle 时出现错误

    我有一个使用 gradle 构建系统的项目 我愿意向其中添加 New Relic 监控 该项目 包括 New Relic 在 Linux Fedora 20 上运行良好 但无法在我的 Mac 开发系统上构建 并给出错误说明Agent JAR
  • 如何在 nunit 测试用例中使用元组?

    我尝试使用元组指定 nUnit 测试用例 但在 VisualStudio 中收到编译器错误 这个简单的例子演示了我正在尝试做的事情 TestCase 1 2 3 5 public void TestRangeOverlaps int sta
  • 我们可以用单个公钥拥有多个私钥吗?

    我正在使用公钥加密数据并使用私钥解密数据 是否有可能用一个公钥拥有多个私钥 不 你不能 这是公共私钥加密的本质 为什么你想要为一个公钥拥有多个私钥 如果你想签署加密文件怎么办 如果可能的话 我可以将加密文件发送给您的朋友并用我制作的私钥对其
  • Jquery Dropzone动态改变POST位置

    我有一个关于 Dropzone js 的问题 我希望能够动态更改帖子 URL 例如 window onload function myDropzone new Dropzone my awesome dropzone url upload
  • 当使用密码锁定屏幕时,iOS 应用程序无法在后台访问文件

    Good day 我有一个 IOS 消息应用程序 该应用程序将接收和发送的消息存储在 sqlite3 数据库中 并且该应用程序还会生成日志文件 这可能发生在前台或后台任务中 当在 IOS 设备上禁用密码时 一切工作正常 即使屏幕关闭且应用程
  • jquery 如何查找第一个父元素

    考虑下面的 html div class container1 div class container2 div class container3 div class container4 div class element div div
  • 在javascript中解压缩字符串[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道一个实现 UNZIP 算法的简单 JavaScript 库吗 没有磁盘文件访问 仅压缩和解压缩
  • cv2.VideoWriter_fourcc 的反义词是什么?

    功能cv2 VideoWriter fourcc从字符串 四个字符 转换为 int 例如 cv2 VideoWriter fourcc MJPG 给出一个int对于编解码器 MJPG 无论是什么 OpenCV 是否提供相反的功能 我想将值显
  • 创建半甜甜圈或议会席位图表

    我想在 ggplot2 中创建一个显示议会席位大小的图表 如下图所示 我的主要问题本质上是如何将圆环图转换为半圆环图 半圆弧 以上面的图片为例 我不知道从这里到哪里 df lt data frame Party c GUE NGL S D
  • 使用 LINQ 的 IQueryable 左外连接的扩展方法

    我正在尝试使用返回类型实现左外连接扩展方法IQueryable 我写的函数如下 public static IQueryable
  • 如何在 C++ 中最有效地将像素数组渲染到窗口?

    到目前为止 我一直在使用 SDL 2 0 将像素数组复制到纹理中 然后在屏幕上渲染 我的渲染方法如下所示 for int i 0 i lt WIDTH HEIGHT i pixels i 0xFFFF0000 pixel Format AA
  • 如何检查所有 Maven 依赖项是否都是针对 Java 6 编译的

    我正在寻找一个 Maven 插件 或其他 Maven 方式 来强制 Maven 项目的所有依赖项都编译为正确的 java 主要版本类文件格式 背景 我正在将现有项目从 Java 7 降级到 Java 6 并且我需要检查库是否是针对 Java
  • React Native Android 本地镜像

    我有这个
  • 将按钮与 ScrollView 中的底部对齐

    我正在尝试将按钮与 ScrollView 底部对齐并使 ScrollView 填充页面 第一张截图是它的样子 第二张截图是我想要的 在屏幕截图中 未使用 ScrollView 因为没有足够的项目 但 ScrollView 内的项目数量不固定
  • 在对话框前面显示小吃栏

    我使用以下方法来展示SnackBar在我的应用程序中 public static void showSnackBar String msg View view Snackbar snackbar Snackbar make view msg
  • 使用“expo install”来安装我需要安装的所有内容是否安全?

    我正在做一个世博会项目 我们必须使用expo install添加其他展览库时 例如expo permissions expo av 但我们也可以使用expo install对于非世博图书馆 例如react native root toast
  • 如何清除实体框架中的待定更改

    我有一些表数据DbContext我不想保存 我已经删除了数据库 重新设置了它 但是挂起的更改不会消失DbContext 重建数据库后 我的数据库表为空 但是当我将实体作为对象列表调用时 它仍然包含旧对象 关于如何清除旧的待处理数据有什么建议
  • JsonValueProvider 从 MVC 应用程序抛出错误

    我们开始在日志中看到这一点 知道从哪里开始寻找问题吗 调用堆栈中没有任何内容可以帮助我们开始 Message An item with the same key has already been added at System ThrowH