Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的JSON字符串在使用www表单URL编码发送时在服务器端为空?_C#_Asp.net_Json_Ajax - Fatal编程技术网

C# 为什么我的JSON字符串在使用www表单URL编码发送时在服务器端为空?

C# 为什么我的JSON字符串在使用www表单URL编码发送时在服务器端为空?,c#,asp.net,json,ajax,C#,Asp.net,Json,Ajax,我有一个使用jquery/ajax的ASP.NET/MVC4应用程序 我正试图使用$.ajax(…) 我们主要使用contentType“application/json”来实现这一点,这一点非常有效。但是,在这一特定情况下,服务器会抛出异常,因为传输的数据太长。我已经尽了一切努力来增加web.config文件中反序列化程序的maxJsonLength,但它不起作用,没有人能找出原因 有人建议,作为一种解决方法,将contentType发送为“application/x-www-form-url

我有一个使用jquery/ajax的ASP.NET/MVC4应用程序

我正试图使用
$.ajax(…)

我们主要使用contentType
“application/json”
来实现这一点,这一点非常有效。但是,在这一特定情况下,服务器会抛出异常,因为传输的数据太长。我已经尽了一切努力来增加web.config文件中反序列化程序的
maxJsonLength
,但它不起作用,没有人能找出原因

有人建议,作为一种解决方法,将contentType发送为
“application/x-www-form-urlencoded;charset=UTF-8”
,然后让我的控制器手动反序列化对象,而不是让MVC框架来执行

Javascript:

function AjaxRequest(data, dataType, type, url, contentType, success, error, args)
{
    if (url.indexOf("MyController/SomeMethodInMyController") > 0)
        contentType = "application/x-www-form-urlencoded; charset=UTF-8";

    data = JSON.stringify(data);

    $.ajax({async: args.async, cache: args.cache, data: data, dataType: dataType, type: type, url: url, contentType: contentType, traditional: true, headers : { ... }, beforeSend: { ... }, success: { ... }, error: { ... }, complete: { ...});
}

function SomeFunction()
{
    var object = {};
    object.Name = $("#someControl").val();
    object.RtfData = $("someOtherControl").val();

    AjaxRequest(object, 'html', 'post', 'MyController/SomeMethodInMyController', 'application/json;', function (response) { ... }, function (error) { ... });
}
在这种情况下,我的应用程序不再在MVC框架试图自行反序列化对象时“内部”崩溃。现在它绕过了所有这些,直接在我的控制器中调用该方法。有点黑,但3天后我会拿走我能得到的

C#:

public void SomeMethodInMyController(字符串formData)
{
JavaScriptSerializer jss=新的JavaScriptSerializer();
jss.MaxJsonLenght=int.MaxValue;
MyType objMyType=jss.Deserialize(formData);
//使用objMyType进行操作
}
问题是,当我在这个方法中设置断点时,
formData
null


在我的浏览器控制台中,在
$.ajax()之前实际执行时,我将
typeof(data)
输入控制台,控制台返回
“string”
。如果我将鼠标悬停在符号上,我可以看到它包含的所有数据都在那里。那么为什么在我的C代码中,值是
null

我想你需要发送一个而不仅仅是一个字符串。尝试如下更改
AjaxRequest
功能:

function AjaxRequest(data, dataType, type, url, contentType, success, error, args)
{
    if (url.indexOf("MyController/SomeMethodInMyController") > 0)
        contentType = "application/x-www-form-urlencoded; charset=UTF-8";

    var form = new FormData();
    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: { ... }, success: { ... }, error: { ... }, complete: { ...});
}

我认为你需要发送一封信,而不仅仅是一个字符串。尝试如下更改
AjaxRequest
功能:

function AjaxRequest(data, dataType, type, url, contentType, success, error, args)
{
    if (url.indexOf("MyController/SomeMethodInMyController") > 0)
        contentType = "application/x-www-form-urlencoded; charset=UTF-8";

    var form = new FormData();
    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: { ... }, success: { ... }, error: { ... }, complete: { ...});
}

这会导致javascript异常“非法执行”。您的意思是“非法调用”吗?我更新了答案,在ajax设置中添加了“processData:false”——你能看到它是否仍然存在异常吗?啊,是的,我错了。现在查看错误日志:
TypeError-Java脚本错误:非法调用:在文档路径“localhost/myApp”处;在AjaxRequest(“[object object]”、“html”、“post”、“/MyController/SomeMethodInMyController”、“application/json;”、”函数(响应)中{&
;
;//如果响应不为空,我们将显示下载文件的弹出窗口。&&&&&&
;
;
然后只给出堆栈的其余部分。我刚刚看到了您的编辑;我现在将尝试它……测试此错误大约需要10分钟,所以我还不知道它……尝试添加这两个设置,以防万一:contentype:false,mimeType:“multipart/form data”这会导致javascript异常“非法执行”。你是说“非法调用”吗?我更新了答案,添加了“processData:false”到ajax设置-你能看到它是否仍然存在异常吗?啊,是的,我的错误。现在查看错误日志:
TypeError-Java脚本错误:非法调用:在文档路径“localhost/myApp.”和#xA;在AjaxRequest(“[object object]”、“html”、“post”、“/MyController/SomeMethodInMyController”、“application/json;”、函数(答复){&
;
;//如果响应不为空,我们将显示下载文件的弹出窗口。&&&&&&
;
;
然后只给出堆栈的其余部分。我刚刚看到了您的编辑;我现在将尝试它……测试此错误大约需要10分钟,所以我还不知道它……尝试添加这两个设置,以防万一:contentype:false,mimeType:“多部分/表单数据”