ajax POST发送null

I originally wrote the call as a GET but found a limitation with the length of the URI. Ideally, the call will take an object and turns it into a JSON format string, then sends it to a controller which will encrypt that string. The controller will send back a true/false if it succeeded.

My problem with POST, once it reaches the controller, the data parameter set from the ajax is null.

Here is the 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;
    }
});

Here is the controller:

[HttpPost]
public bool Encrypt(string jsonDoc)
{
    return serverConnection.Encrypt();
}

Note that, when I simply change the type to 'GET', it works great but when the form gets too long, it throws a 414 status error.

Most of the fixes found that I seem to have is the 'application/json'. I've also set ajax to traditional.

After going through a rabbit-hole of security tokens and validating forms, it wasn't any of that... this might be a solution for anyone using ASP.NET Core 2.1 MVC (5?) or just in general. Could have been a syntax mistake, return type mistake, or a combination.

New 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;
    }
});

New Controller

    [HttpPost]
    public ActionResult EncryptJSON(string jsonDoc) // Switch to ActionResult, formerly JsonResult
    {
        return Json(serverConnection.Encrypt());
    }