gpt4 book ai didi

jquery - 通过 jQuery 将 JSON 数据发布到 ASP .NET MVC 4 Controller 操作

转载 作者:IT老高 更新时间:2023-10-28 12:51:14 26 4
gpt4 key购买 nike

我在尝试将复杂的 JSON 对象传递给 MVC 4 Controller 操作时遇到问题。由于 JSON 内容是可变的,我不希望 MVC 将 JSON 的单个属性/元素映射到操作方法的参数列表中的参数。我只想在 Controller 操作中将数据作为单个 JSON 字符串参数获取。

这是我的操作方法的签名:

    [HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(string jsonOfLog)

这是我从浏览器发布一些 JSON 数据的尝试:

    data = {prop: 1, myArray: [1, "two", 3]}; 
//'data' is much more complicated in my real application
json = {jsonOfLog: data};

$.ajax({
type: 'POST',
url: "Home/ConvertLogInfoToXml",
data: JSON.stringify(json),
success: function (returnPayload) {
console && console.log ("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log ("request failed");
},
dataType: "xml",
contentType: "application/json",
processData: false,
async: false
});

当我在 ConvertLogInfoToXML 方法的开头命中断点时,jsonOfLog 为空。

如果我更改 JavaScript 中设置的 'json' 变量以使 jsonOfLog 属性为简单字符串,例如:

json = { jsonOfLog: "simple string" };

那么当我在 ConvertLogInfoToXML 方法开头的断点被命中时,jsonOfLog 就是字符串的值(例如“简单字符串”)。

我尝试将action方法中jsonOfLog参数的类型改为object类型:

    [HttpPost]
[ValidateInput(false)]
public string ConvertLogInfoToXml(object jsonOfLog)

现在,使用原始 JavaScript 代码(我在其中传递更复杂的“数据”对象),jsonOfLog 获取 {object} 的值。但是调试器并没有在监 window 口中显示更多细节,而且我不知道我可以使用什么方法来操作这个变量。

如何将 JSON 数据传递给 MVC Controller ,其中传递的数据是字符串化的复杂对象?

谢谢,巴黎

最佳答案

问题在于您的 dataType 和您的 data 参数的格式。我刚刚在沙箱中对此进行了测试,并且以下工作:

C#

    [HttpPost]
public string ConvertLogInfoToXml(string jsonOfLog)
{
return Convert.ToString(jsonOfLog);
}

javascript

<input type="button" onclick="test()"/>

<script type="text/javascript">

function test() {
data = { prop: 1, myArray: [1, "two", 3] };
//'data' is much more complicated in my real application
var jsonOfLog = JSON.stringify(data);

$.ajax({
type: 'POST',
dataType: 'text',
url: "Home/ConvertLogInfoToXml",
data: "jsonOfLog=" + jsonOfLog,
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
},

processData: false,
async: false
});
}

</script>

特别注意data,发送文本时,需要发送一个与你的参数名称匹配的变量。它不漂亮,但它会为您提供梦寐以求的未格式化字符串。

运行时,jsonOfLog 在服务器函数中如下所示:

    jsonOfLog   "{\"prop\":1,\"myArray\":[1,\"two\",3]}"    string

HTTP POST header :

Key Value
Request POST /Home/ConvertLogInfoToXml HTTP/1.1
Accept text/plain, */*; q=0.01
Content-Type application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With XMLHttpRequest
Referer http://localhost:50189/
Accept-Language en-US
Accept-Encoding gzip, deflate
User-Agent Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
Host localhost:50189
Content-Length 42
DNT 1
Connection Keep-Alive
Cache-Control no-cache
Cookie EnableSSOUser=admin

HTTP POST 正文:

jsonOfLog={"prop":1,"myArray":[1,"two",3]}

响应头:

Key Value
Cache-Control private
Content-Type text/html; charset=utf-8
Date Fri, 28 Jun 2013 18:49:24 GMT
Response HTTP/1.1 200 OK
Server Microsoft-IIS/8.0
X-AspNet-Version 4.0.30319
X-AspNetMvc-Version 4.0
X-Powered-By ASP.NET
X-SourceFiles =?UTF-8?B?XFxwc2ZcaG9tZVxkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXE12YzRQbGF5Z3JvdW5kXE12YzRQbGF5Z3JvdW5kXEhvbWVcQ29udmVydExvZ0luZm9Ub1htbA==?=

响应正文:

{"prop":1,"myArray":[1,"two",3]}

关于jquery - 通过 jQuery 将 JSON 数据发布到 ASP .NET MVC 4 Controller 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17370062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com