javascriptjqueryajaxasp.net-mvc

How to read raw JSON request body in ASP.NET MVC when using application/json?


When sending data via AJAX using contentType: application/json, the data is not available in Request.Form in my ASP.NET MVC controller.

What I Tried:

When using application/x-www-form-urlencoded, I can retrieve values using Request.Form["input1"]. But when sending JSON (application/json), Request.Form is empty. I checked Request.QueryString and Request.Params, but the data isn't there either.

CODE:

AJAX Request

    // reading form data
    var form = $("form")[0];
    var formData = new FormData(form);

    var object = {};
    formData.forEach(function(value, key){
      object[key] = value;
    });
    var data = JSON.stringify(object);


    // ajax part
    // POST application/json; charset=utf-8
    $.ajax({
    type: "POST",
    url: "@Url.Action("FormSubmit","Home")",
    data: data,
    dataType: "json",
    async: true,
    contentType: "application/json",
    processData: true,
    success: function(result) { },
    error: function(result) { }
  });

Controller Part

    [HttpPost]
    public ActionResult FormSubmit(string input1, string input2)
    {
        var httpContext= HttpContext;
        var response = Response;
        var request = Request;
        throw new NotImplementedException();
    }

Solution

  • Found the answer i just need to read post Payload

    here is the code

        [HttpPost]
        public ActionResult FormSubmit()
        {
            Request.InputStream.Position = 0;
            var reqMemStream = new MemoryStream(HttpContext.Request.BinaryRead(HttpContext.Request.ContentLength));
            string reqString = Encoding.ASCII.GetString(reqMemStream.ToArray());
    
            throw new NotImplementedException();
        }