#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)