невозможно передать класс из angularjs в веб-API - PullRequest
2 голосов
/ 14 марта 2019

Я пытаюсь обновить информацию об элементе, как показано ниже, при нажатии кнопки обновления в методе обновления WEB API.


$scope.Update = function () {
    var ItemData = {
        ITEM_ID: $scope.inpItemId,
        ITEM_NAME: inpItemName,
        NET_WEIGHT: inpNetWeight,
    };
    //if (ItemData.ITEM_ID != null) {
    //    $http.put(
    //        'http://localhost:55762/api/ItemMaintenance/UpdateItemDetails',
    //        // JSON.parse(JSON.stringify(ItemData)),
    //        JSON.stringify(ItemData),
    //        {
    //            headers: { 'Content-Type': 'application/json' }
    //            // body: JSON.stringify(ItemData);
    //        }
    //    ).success(function (response) {
    //        alert("Updated successfully....");
    //    }, function errorCallback(response) {
    //        alert("NOT  ...  Updated ....");
    //    });

    if (ItemData.ITEM_ID != null || ItemData.ITEM_ID === "") {
        $http({
            method: 'put', url: 'http://localhost:55762/api/ItemMaintenance/UpdateItemDetails',
            data: JSON.stringify(ItemData),
            contentType: "application/json"
        }).then(function successCallback(response) {
            alert("Updated successfully....");
        }, function errorCallback(response) {
            alert("NOT  ...  Updated ....");
        });
    }
}

WEB API: возможность получить точку отладки методом UpdateItemDetails.

[HttpPut]
public HttpResponseMessage UpdateItemDetails([FromBody]MA_Item ItemDetails) //----ItemDetails are always null here
{
    if (ItemDetails != null)
    {
        bool result = itemRepository.UpdateItemDetails(ItemDetails);
        if (result)
            return Request.CreateResponse(HttpStatusCode.OK, "Updated Successfully");
    }
    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Something wrong !");
}

ItemDetails всегда равны нулю при достижении WEB API.

Файл Ma_Item.cs:

public class MA_Item
{
    public string ITEM_ID { get; set; }
    public string ITEM_NAME { get; set; }
    public decimal NET_WEIGHT { get; set; }
    ......
}

1 Ответ

0 голосов
/ 14 марта 2019

Если вы отправляете ItemData в атрибуте data, тогда нет необходимости использовать [FromBody] в вашем действии веб-API. С этот ответ -

By default web api (and asp.net mvc) in a POST request deserializes (reference) object arguments from http message body (data)

Кроме того, поскольку вы не указали, как выглядит ваш класс ItemDetails, необходимо убедиться, что имена атрибутов одинаковы, чтобы их можно было правильно сопоставить при десериализации. Это также может быть причиной получения ItemDetails как NULL. Одно хорошее соглашение - В JS конец используй camelCase-

var ItemDetails = {                    
                    itemId: $scope.inpItemId,                   
                    itemName: inpItemName,
                    netWeight : inpNetWeight,
                    ...
                    ...                 
                   };

В конце C # используйте PascalCase-

Class ItemDetails
{
public int ItemId {get; set;}
public string ItemName {get; set;}
public double NetWeight {get; set;}
}
...