Не удается передать данные в asp.net ядро

#asp.net #angularjs #asp.net-mvc #asp.net-core #ngresource

#asp.net #angularjs #asp.net-mvc #asp.net-core #ngresource

Вопрос:

У меня проблема, мне нужно отправить данные с моего Angular на мой ASP.NET Основной сервер. Вот контроллер:

 [HttpPut]
public IActionResult setCoupon(int id, string CouponCode, int DiscountPercent)
{
    try
    {
        var coupon = new Coupon()
        {
            Id = id,
            CouponCode = CouponCode,
            DiscountPercent = DiscountPercent
        };
        return Ok(coupon);
    }
    catch (Exception)
    {
        return BadRequest("Wystąpił błąd");
    }
}
  

Вот фабрика из ngResource (getCoupon работает):

 app.factory('couponApi',
    function($resource) {
        return $resource("/coupon/setCoupon",
            {},
            {
                getCoupon: {
                    method: "GET",
                    isArray: false
                },
                putCoupon: {
                    method: "PUT",
                    isArray: false,
                }
            });
    });
  

Вот использование factory:

         $scope.addCouponCode = function(coupon) {
        couponApi.putCoupon(coupon);
    };
  

Когда я отлаживаю свой asp.net сервер, на котором я нашел свои параметры null или 0. У меня такая же проблема с библиотекой restangular.

Я также пытаюсь таким образом написать метод контроллера

     [HttpPut]
    public IActionResult setCoupon(Coupon coupon)
    {
        try
        {
            return Ok(coupon);
        }
        catch (Exception)
        {
            return BadRequest("Wystąpił błąd");
        }
    }
  

Мой json, который я пытаюсь отправить, это

 {"id":1,"couponCode":"abc","discountPercent":10}
  

и мой метод Echo отправляет мне это:

 {"id":0,"couponCode":null,"discountPercent":0}
  

Обновить

По-видимому, в asp.net ядро, метод должен иметь атрибут[FromBody]

     [HttpPut]
    public IActionResult setCoupon([FromBody] Coupon coupon)
    {
        try
        {
            return Ok(coupon);
        }
        catch (Exception)
        {
            return BadRequest(new {errorMessage = "Wystąpił błąd"});
        }
    }
  

Комментарии:

1. Эй, взгляните на:asp.net/web-api/overview/formats-and-model-binding / . … похоже, вам нужно создать модель для вашего запроса.!

2. Я обновил свой пост, я попытался сделать это таким образом, и у меня есть модель, но я все равно получаю null или 0

3. можете ли вы попробовать отправить {«Id»:1,»CouponCode»:»abc»,»DiscountPercent»:10} . возможно, чувствителен к регистру.

Ответ №1:

Как говорит Альдо в комментариях. Ответ таков: C # ожидает сопоставления данных json с учетом регистра. Итак:

 {"id":1,"couponCode":"abc","discountPercent":10}
  

необходимо:

 {"id":1,"CouponCode":"abc","DiscountPercent":10}
  

Вы получали 0 для ‘discountPercent’, потому что это значение по умолчанию для несопоставимого int, тогда как null является значением по умолчанию для несопоставимой строки, поэтому Echo возвращает:

 {"id":0,"couponCode":null,"discountPercent":0}
  

Комментарии:

1. Отправка этого json: ‘code’ {«CouponCode»:»abc»,»DiscountPercent»:10,»Id»:1} ‘код’

2. Отправка этого json не помогла. Я все еще получаю нуль или ноль. {«CouponCode»: «abc»,»DiscountPercent»: 10, «Id»:1}

3. «id» должен быть в нижнем регистре. Параметры должны соответствовать оболочке setCoupon(int id, string CouponCode, int DiscountPercent)