Объект параметра Web Api является нулевым даже при вызове Ajax - PullRequest
0 голосов
/ 20 ноября 2018

Вот моя модель:

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; }
}
}

Вот мой контроллер,

[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());
    }
}

и вот как я называю свой контроллер в 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
        });

С этимкоды Я передаю JSON для моего объекта в контроллере.Когда я ставлю точку останова в моем контроллере или если я помещаю свою модель в часы.Все переменные в моей модели все еще нулевые.Но в моем JavaScript все мои переменные имеют значения.Пожалуйста, кто-нибудь, помогите мне.Спасибо!

1 Ответ

0 голосов
/ 20 ноября 2018

Ваше тело запроса не соответствует ожидаемому объекту в методе API.

Когда вы определяете тело как "{multipackageSKU:" + JSON.stringify(obj) + "}", которое фактически равно классу C # как

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

Именно поэтому он не совпадает с сигнатурой метода API.

Самое простое решение, попробуйте определить тело запроса как

data: JSON.stringify(obj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...