当前位置: 首页 > 编程语言 > C#

为什么我的JSON字符串在使用www-form-urlencoded发送时在服务器端为空?分享

时间:2023-04-10 18:55:09 C#

为什么我的JSON字符串在使用www-form-urlencoded发送时在服务器端为空?我有一个使用jquery/ajax的ASP.NET/MVC4应用程序。我正在尝试使用$.ajax(...)从客户端向服务器发送一个非常大的字符串首先我们使用contentType"application/json"并且它工作得很好。但是,在这种特殊情况下,服务器会抛出异常,因为传输的数据太长。我已经尝试了所有方法来增加web.config文件中反序列化器的maxJsonLength,但它不起作用,没有人能弄清楚原因。作为解决方法,有人建议将contentType设置为“application/x-www-form-urlencoded;charset=UTF-8”,然后让我的控制器手动反序列化对象,而不是让MVC框架执行它。使用Javascript:functionAjaxRequest(data,dataType,type,url,contentType,success,error,args){if(url.indexOf("MyController/SomeMethodInMyController")>0)contentType="application/x-www-form-urlencoded;字符集=UTF-8";数据=JSON.stringify(数据);$.ajax({async:args.async,cache:args.cache,data:data,dataType:dataType,type:type,url:url,contentType:contentType,traditional:true,headers:{...},beforeSend:{...},成功:{...},错误:{...},完成:{...});}functionSomeFunction(){varobject={};object.Name=$("#someControl").val();object.RtfData=$("someOtherControl").val();AjaxRequest(object,'html','post','MyController/SomeMethodInMyController','application/json;',function(response){...},function(error){...});在这种情况下,我的应用程序没有然后“整体”崩溃,MVC框架尝试反序列化对象本身。现在它绕过了所有这些并直接调用我的控制器中的方法。有点hacky,但3天后我会尽我所能。C#:publicvoidSomeMethodInMyController(stringformData){JavaScriptSerializerjss=newJavaScriptSerializer();jss.MaxJsonLenght=int.MaxValue;MyTypeobjMyType=jss.Deserialize(formData);//dostuffwithobjMyType}问题是当我在方法中设置断点时得到此formData为null。在我的浏览器控制台中,$.ajax();在$.ajax();之前实际上执行我类型typeof(data)到返回“字符串”的控制台。如果我将鼠标悬停在该符号上,我可以看到我希望它包含的所有数据。那么为什么我的C#代码中的值是null呢?我认为您需要发送一个FormData对象,而不仅仅是一个字符串。尝试改变你的AjaxRequest函数如下:以上是C#学习教程:为什么我的JSON字符串在使用www-form-urlencoded发送时在服务器端为null?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——functionAjaxRequest(data,dataType,type,url,contentType,success,error,args){if(url.indexOf("MyController/SomeMethodInMyController")>0)contentType="application/x-www-form-urlencoded;charset=UTF-8";varform=newFormData();form.append("MyData",JSON.stringify(data));$.ajax({processData:false,async:args.async,cache:args.cache,data:form,dataType:dataType,type:type,url:url,contentType:contentType,traditional:true,headers:{...},beforeSend:{...},成功:{...},错误:{...},完成:{...});}本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: