【发布时间】:2016-12-07 17:06:48
【问题描述】:
这是我的第一个 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 用于服务结构。
我在这里缺少什么?对不起,如果答案真的很琐碎。感谢您的帮助。
【问题讨论】:
-
您没有发回响应中的内容。
return Ok(documentContents); -
控制器中为空字符串。我的问题是我收到的数据是空的。
-
在服务结构中运行之前,您的应用程序是否在本地运行?
-
不确定。 Visual Studio 尝试进入调试模式并且只是冻结。我还没有尝试过创建一个没有服务结构的核心应用程序。我会调查的。我应该指出,所有的获取和应用程序的其余部分都可以工作。
-
如果删除
[FromBody]属性会发生什么?
标签: c# json asp.net-core asp.net-core-mvc azure-service-fabric