I am using jQuery to submit the following request:
$.ajax({
    url: encodeURI('/server/api/user/update.php/'),
    method: 'POST',
    contentType: 'application/json',
    headers: {
        'Authorization': 'Bearer ' + utility.getJsonWebToken()
    },
    data: JSON.stringify(e.model),
    dataType: 'json'
})
And I have the following PHP code that verifies that the request is valid and contains the necessary body:
// check for bad method
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    $returnedJson['error'] = 'The supplied request method is not supported for the requested resource. This resource expects a POST request.';
    echo json_encode($returnedJson);
    return;
}
// check for bad request
$errors = array();
$user = new UserModel();
foreach (UserModel::$RequiredColumnNames as $property) {
    $success = ControllerUtility::isValueInRequest($_POST, $property);
    if (!$success) {
        array_push($errors, $property);
        continue;
    }
    $user->$property = $_POST[$property];
}
if (count($errors) > 0) {
    http_response_code(400);
    $returnedJson['error'] = 'Malformed request syntax. The following properties are missing from the request: ' . join(', ', $errors);
    echo json_encode($returnedJson);
    return;
}
Every time I submit the request, I get 400 error with the 'Malformed request syntax. The following properties are missing from the request: ...' error message.
I echoed the $_POST and $_REQUEST but in both instances and empty array is returned.
I verified that the request headers is a POST:
POST /server/api/user/update.php/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json
Authorization: Bearer -removed-
X-Requested-With: XMLHttpRequest
Content-Length: 180
Origin: http://localhost
Connection: keep-alive
Referer: -removed-
Sec-GPC: 1
And the fields are included in my request JSON:
{
    "CreatedBy": null,
    "CreatedOn": "2021-02-28 13:53:54",
    "DeletedOn": null,
    "Email": "-removed-",
    "ModifiedBy": "1",
    "ModifiedOn": "2021-02-28 16:35:51",
    "UserId": "1",
    "Username": "Adminn"
}
I have even removed the content-type header from my PHP without success. I've also tried just passing e.model instead of calling stringify in the AJAX request. At this point I'm at a loss as to what I'm doing wrong.
 
    