这是我的第一个asp.net核心应用程序,所以我可能错过了一些明显的东西,但我已经查看了其他StackOverflow的答案,而那些解决方案对我没有帮助。我有一个asp.net核心mvc应用程序,我在服务结构上运行,我试图将字符串发布到控制器。该字符串最初是一个json对象数组。
我的ajax帖子:
var sendThis = { "operations": JSON.stringify(operations) };
$.ajax({
url: '/Home/Execute',
type: 'POST',
data: sendThis,
dataType: "json",
contentType: 'application/json; charset=utf-8',
error: function (xhr) {
$("#save-footer-text").val("Saving failed. Please contact an administrator");
},
success: function (result) {
$(".save-footer").addClass("slider");
},
async: true
});
我的控制器在另一边。我从另一个堆栈溢出答案中获取了流内容,但它只是在完成后返回一个空字符串。
[HttpPost]
public IActionResult Execute([FromBody] string operations /*this is null*/)
{
var i = 5;
string documentContents; //this will be an empty string.
Request.Body.Position = 0;
using (Stream receiveStream = Request.Body)
{
using (StreamReader readStream = new StreamReader(receiveStream, Encoding.Unicode))
{
documentContents = readStream.ReadToEnd();
}
}
Console.WriteLine(i);
return new OkResult();
}
从其他stackoverflow答案中,我也尝试使用传统设置发布为true,并且我已尝试将操作发布到模型中,例如
public class M
{
public string status { get; set; }
public string appName { get; set; }
public string startTime { get; set; }
public string endTime { get; set; }
public string description { get; set; }
public string operation { get; set; }
}
控制器已更改为公开IActionResult Execute([FromBody] List<M> operations)
我已检查过我的javascript确实发送了请求,Chrome工具报告请求有效负载为:
operations = 我的json字符串
我也在Fiddler看到了这一点,所以我知道它已经过去了。
根据this回答,我也尝试过更新JsonSettings,但这也没有帮助。
我使用1.0.0-rc2-final作为asp.net核心软件包,使用5.1.150作为服务结构。
我在这里缺少什么?对不起,如果答案真是微不足道。谢谢你的帮助。
答案 0 :(得分:0)
这是M的清单?
如果是,那么你的json就不应该像这样
var sendThis = { "operations": JSON.stringify(operations) };
试试这个:
var sendThis = JSON.stringify(operations);
我认为asp.net正在尝试反序列化像这样的对象:
public class Operation
{
public List<M> Operations { get; set; }
}
答案 1 :(得分:0)
如果脚本中的操作变量是数组
var operations = new Array();
var op1 = { status: 's1', appName: 'a1', startTime: 'st1', endTime: 'e1', description: 'd1', operation: 'o1' };
operations.push(op1);
var op2 = { status: 's2', appName: 'a2', startTime: 'st2', endTime: 'e2', description: 'd21', operation: 'o2' };
operations.push(op2);
var sendThis = JSON.stringify(operations);
...// ajax call here
控制器post方法定义如下,然后List<M> operations
应包含按预期通过线路发送的值。
[HttpPost]
public IActionResult Execute([FromBody]List<M> operations)
{
// ... some code here
return Json("");
}