首页 > 解决方案 > ajax POST 发送空值

问题描述

我最初将调用编写为 GET,但发现 URI 的长度存在限制。理想情况下,调用将获取一个对象并将其转换为 JSON 格式的字符串,然后将其发送到将加密该字符串的控制器。如果成功,控制器将发回真/假。

我的 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 设置为传统的 .

标签: c#ajaxmodel-view-controller.net-core

解决方案


在通过安全令牌和验证表单的兔子洞之后,它不是任何一个......这可能是任何使用 ASP.NET Core 2.1 MVC(5?)或只是一般的人的解决方案。可能是语法错误、返回类型错误或两者兼而有之。

新阿贾克斯

$.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());
    }

推荐阅读