我最初将调用编写为GET,但发现URI的长度受到限制。理想情况下,该调用将采用一个对象并将其转换为JSON格式的字符串,然后将其发送到将对该字符串进行加密的控制器。如果成功,则控制器将发送回true / false。
我的POST问题,一旦到达控制器,从ajax设置的数据参数为空。
这是ajax / js:
var encActionURL = '@Url.Action("Encrypt", "Home")';
$.ajax({
url: encActionURL,
type: "POST",
contentType: "application/json; charset=utf-8;",
dataType: "json",
async: true,
traditional: true,
data: { jsonDoc: JSON.stringify(jsonDataFile) },
success: /*OnSuccess*/ function (result) {
// DO STUFF;
}
});
这是控制者:
[HttpPost]
public bool Encrypt(string jsonDoc)
{
return serverConnection.Encrypt();
}
请注意,当我简单地将类型更改为'GET'时,效果很好,但是当表单过长时,则会引发414状态错误。
大多数修复程序发现我似乎拥有的是'application / json'。我还将ajax设置为 traditional 。
答案 0 :(得分:0)
经历了安全令牌和验证形式的麻烦之后,这还不是全部...对于使用ASP.NET Core 2.1 MVC(5?)或通常而言的任何人,这可能都是一个解决方案。可能是语法错误,返回类型错误或组合错误。
新Ajax
$.ajax({
url: encActionURL,
type: "POST",
data: { 'jsonDoc': JSON.stringify(jsonDataFile) }, // NOTICE the single quotes on jsonDoc
cache: false,
success: /*OnSuccess*/ function (result) {
// DO STUFF;
}
});
新控制器
[HttpPost]
public ActionResult EncryptJSON(string jsonDoc) // Switch to ActionResult, formerly JsonResult
{
return Json(serverConnection.Encrypt());
}