javascriptajaxasp.net-mvcajax-request

Ajax request Post Params


I want to use an ajax post request, but my Request only works when i use a Get request.

When I use a Get Request my model is filled correctly. With the post request my my model is null.

So this works:

self.ClearRegimeFromUntil = function () {
    var model = { clearFrom: kendo.format("{0:dd/MM/yyyy hh:mm:ss tt}", self.clearFrom()), clearUntil: kendo.format("{0:dd/MM/yyyy hh:mm:ss tt}", self.clearUntil()), userId: self.UserID() };
    console.log(model);
    $.ajax({
        type: "GET",
        url: rootUrl + "api/CalendarDays/ClearRegimeFromUntil",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: model,
        success: function (response) {
            console.log(response);

        }
    });
};

with on the controller side:

    [System.Web.Http.HttpGet]
    [System.Web.Http.Route(@"api/CalendarDays/ClearRegimeFromUntil")]
    public async Task<IHttpActionResult> ClearRegimeFromUntil([FromUri] DeleteFromModel model)
    {

        //await _userCalendarDayRepository.DeleteFutureUserCalendarDays(model.UserId,DateTime.Parse( model.ClearFrom));
        return Ok(true);
    }

But this doesn't work:

self.ClearRegimeFromUntil = function () {
    var model = { clearFrom: kendo.format("{0:dd/MM/yyyy hh:mm:ss tt}", self.clearFrom()), clearUntil: kendo.format("{0:dd/MM/yyyy hh:mm:ss tt}", self.clearUntil()), userId: self.UserID() };
    console.log(model);
    $.ajax({
        type: "POST",
        url: rootUrl + "api/CalendarDays/ClearRegimeFromUntil",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: model,
        success: function (response) {
            console.log(response);

        }
    });
};

with on the controller side:

    [System.Web.Http.HttpPost]
    [System.Web.Http.Route(@"api/CalendarDays/ClearRegimeFromUntil")]
    public async Task<IHttpActionResult> ClearRegimeFromUntil([FromUri] DeleteFromModel model)
    {

        //await _userCalendarDayRepository.DeleteFutureUserCalendarDays(model.UserId,DateTime.Parse( model.ClearFrom));
        return Ok(true);
    }

My model:

public class DeleteFromModel
{
    public string UserId { get; set; }
    public string ClearFrom { get; set; }
    public string ClearUntil { get; set; }

}

Headers and response(no idea how to show them better): http://pastebin.com/AM6ScEsz


Solution

  • Removing the [FromUri] will resolve the problem.

    [System.Web.Http.HttpPost]
    [System.Web.Http.Route(@"api/CalendarDays/ClearRegimeFromUntil")]
    public async Task<IHttpActionResult> ClearRegimeFromUntil(DeleteFromModel model)
    {
    
        //await _userCalendarDayRepository.DeleteFutureUserCalendarDays(model.UserId,DateTime.Parse( model.ClearFrom));
        return Ok(true);
    }