Следуя руководству Microsoft по созданию POSt-запроса, но не работает

#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. внес эти изменения, но это ничего не изменило, по-прежнему получая ту же ошибку