0

Here's my Model:

namespace API.Model
{
[Serializable]
public class OrderModel
{
    public string hashKey { get; set; }
    public int orderId { get; set; }
    public string skuId { get; set; }
    public string itemId { get; set; }
    public string prevItemId { get; set; }
    public int quantity { get; set; }
}
}

Here's my Controller,

[RoutePrefix("api/orderapi")]
public class OrderAPIController : ApiController
{
    [HttpPost]
    [Route("UpdateMultipackage")]
    public IHttpActionResult UpdatePOMultipackageSKU([FromBody] OrderModel multipackageSKU)
    {
        if (!ModelState.IsValid)
        {
            var errors = ModelState
                .SelectMany(x => x.Value.Errors, (y, z) => z.Exception.Message);

            return BadRequest(errors.ToString());
        }

        MPPEWebServices.API.ResInfo results = new MPPEWebServices.API.ResInfo();
        Guid appGuid = new Guid(multipackageSKU.hashKey);
        MPPEOrderController orderController = new MPPEOrderController();

        Guid skuIdGuid = new Guid(multipackageSKU.skuId);
        Guid itemIdGuid = new Guid(multipackageSKU.itemId);
        Guid prevItemIdGuid = new Guid(multipackageSKU.prevItemId);

        if (orderController.UpdatePOMultipackageSKU(multipackageSKU.orderId, skuIdGuid, itemIdGuid, prevItemIdGuid, multipackageSKU.quantity) > 0)
        {
            results.Success = true;
            results.Message = "Success";
        }
        else
        {
            results.Success = false;
            results.Message = "Failed";
        }

        return Ok(results.ToString());
    }
}

and here's how I call my controller in ajax.

var obj =
    {
        hashKey: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
        orderId: 1166,
        skuId: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
        itemId: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
        prevItemId: "5B1D386B-D725-4AD3-AF9D-2CC3FCBE7AAC",
        quantity: 1
    };

$.ajax({
            type: 'POST',
            url: '/api/orderapi/updatemultipackage',
            data: JSON.stringify(obj),
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            success: function (result) {
                alert('Success! ' + result.responseText + " " + this.url + " " + this.data);
            },
            error: function (result) {
                alert('Error! ' + result.responseText + " " + this.url + " " + this.data);
            },
            async: true
        });

With this codes I am passing a json to my object in controller. When I put a breakpoint in my Controller or if I put my model in watch. All of the variables inside my model is still null. But in my JavaScript all of my variable have values.

halfer
  • 19,824
  • 17
  • 99
  • 186
Eugene Santos
  • 61
  • 1
  • 11

1 Answers1

0

You're request body don't match the expected object in the api method.

When you define the body as "{multipackageSKU:" + JSON.stringify(obj) + "}" that is actually equal to a C# class as

public class RequestModel
{
    public OrderModel MultipackageSKU { get; set; }
}

That is why it doesn't match with the api method signature.

Easiest solution, try to define the request body as

data: JSON.stringify(obj)
Marcus Höglund
  • 16,172
  • 11
  • 47
  • 69