ASP.NET Core 3.1 HTTP post [FromBody] always receives null

Viewed 540

I am currently facing this issue after upgrading from .net core 2.2 to .net core 3.1 [FromBody] always receives null from ajax post request.

I have tried to add this code in startup but still it doesn't work

    services.AddControllers()
       .AddJsonOptions(options =>
        options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter()));

=========================================================================================== ASP.NET CORE MEHTOD API _CreateOrEditLeave

  [HttpPost]
    public async Task<JsonResult> _CreateOrEditLeave([FromBody] LeaveRegistrationViewModel leaveRegistrationViewModel)
    {
        if (leaveRegistrationViewModel.LeaveRegistrationView.Id > 0) { leaveRegistrationViewModel.LeaveRegistrationView.UpdatedBy = userId; }
        else { leaveRegistrationViewModel.LeaveRegistrationView.CreatedBy = userId; }

        if (!string.IsNullOrEmpty(leaveRegistrationViewModel.LeaveRegistrationView.LeaveStartDateText))
        {
            leaveRegistrationViewModel.LeaveRegistrationView.LeaveStartDate = eweHelper.StringToDateTime(leaveRegistrationViewModel.LeaveRegistrationView.LeaveStartDateText);
        }
        if (!string.IsNullOrEmpty(leaveRegistrationViewModel.LeaveRegistrationView.LeaveEndDateText))
        {
            leaveRegistrationViewModel.LeaveRegistrationView.LeaveEndDate = eweHelper.StringToDateTime(leaveRegistrationViewModel.LeaveRegistrationView.LeaveEndDateText);
        }
        var result = await leaveRegistrationManager.SaveAsync(leaveRegistrationViewModel.LeaveRegistrationView, leaveRegistrationViewModel.StaffIds);
        return Json(result.IsSuccess);
    }

============================================================================================ **AXJAX POST Method **

 function SubmitCrearteOrEditLeave(form) {
// validate
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
    var data = ConverformToObject($(form).serializeArray());
    StaffIds = $("#StaffSelect").val();
    var LeaveRegistrationView = {
        Id: data.Id,
        LeaveStartDateText: data.LeaveStartDateText,
        LeaveEndDateText: data.LeaveEndDateText,
        LeaveTypeId: data.LeaveTypeId,
        LeaveReason: data.LeaveReason
    };
    var data = { StaffIds: StaffIds, LeaveRegistrationView: LeaveRegistrationView };
    $.ajax({
        type: 'POST',
        url: "/LeaveRegistration/_CreateOrEditLeave",
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (success) {
            if (success) {
                GetData();
                SwalAlertOk('success', SavedSuccessfully, '', function () {
                    $('#LeavRegistration .close').click();
                });
            }
            $('#LeavRegistration .close').click();
        }
    });
  }
return false;

}

1 Answers

The easiest solution to solve this issue can be done by getting back to Newtonsoft.Json

  • installing the Nuget package Microsoft.AspNetCore.Mvc.NewtonsoftJson
  • add the following method in Startup.cs: services.AddRazorPages().AddNewtonsoftJson();
Related