#c# #asp.net-mvc #post
#c# #asp.net-mvc #Публикация
Вопрос:
Я создаю WebAPI с помощью руководства Microsoft. У них есть этот код для создания POST-запроса для добавления элемента в базу данных:
// POST: api/TodoItems
[HttpPost]
public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem)
{
_context.TodoItems.Add(todoItem);
await _context.SaveChangesAsync();
//return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem);
return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem);
}
У меня есть этот код:
[HttpPost]
public int PostItem([FromBody] Item item)
{
collection.addItem(item);
return collection.getSize()
}
}
Вот мой класс коллекции и метод, который я вызываю:
public class Items
{
public Items()
{}
public ArrayList itemCollection = new ArrayList();
public int getSize()
{
return itemCollection.Count;
}
public string getItems()
{
foreach (var item in itemCollection)
{
Console.WriteLine(item.ToString());
}
return "";
}
На данный момент я просто сохраняю элементы в arraylist, поскольку мне пока не требуется база данных. Однако, когда я вызываю свой getItems()
метод, он не добавляет его в массив, а вместо этого добавляет это:
00000000-0000-0000-0000-000000000000 0 False
Вместо этого следует добавить случайный идентификатор Guid, цену и логическое значение, которое должно быть true из моего класса item:
public class Item
{
public Item(){}
public Item(string Name, double Price, bool GlutenFree)
{
this.itemID = Guid.NewGuid();
this.name = Name;
this.price = Price;
this.glutenFree = GlutenFree;
}
public Guid itemID;
public string name;
public double price;
public bool glutenFree;
Я не понимаю, почему это не собирает данные из моего POST-запроса, который просто:
{"name":"pizza",
"price":10,
"glutenFree":false
}
Он точно такой же, как у Microsoft, поэтому я не уверен, почему все идет не так.
Ответ №1:
При определении свойств в классах C # вы должны фактически следовать соглашению о регистре Pascal. Попробуйте преобразовать переменные, объявленные в классе item, в свойства, как показано ниже, и проверьте еще раз, это должно сработать. При определении свойств вы всегда должны следовать соглашению об именовании Pascal
public Guid itemID {get; set;}
public string Name {get; set;}
public double Price {get; set;}
public bool GlutenFree {get; set;}
Комментарии:
1. внес эти изменения, но это ничего не изменило, по-прежнему получая ту же ошибку