Для студенческого проекта мне нужно создать .NET-Core 2.1 Todo API.
Моя сущность Todo:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace TodoApi.Entities
{
public class Todo
{
public int TodoId { get; set; }
public string Name { get; set; }
public bool IsComplete { get; set; }
public int TodoListId { get; set; }
}
}
Моя сущность ListTodo:
using System.Collections.Generic;
namespace TodoApi.Entities
{
public class TodoList
{
public int TodoListId { get; set; }
public string Name { get; set; }
public List<Todo> Todos { get; set; }
}
}
Мой TodoController:
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using TodoApi.Context;
using TodoApi.Entities;
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoController : ControllerBase
{
private readonly TodoContext _context;
public TodoController(TodoContext context)
{
_context = context;
}
[HttpPost]
public IActionResult Create(Todo item)
{
var todoList = _context.TodoList.Find(item.TodoListId);
_context.Todo.Add(item);
_context.SaveChanges();
todoList.Todos.Add(item);
_context.TodoList.Update(todoList);
_context.SaveChanges();
return CreatedAtRoute("GetTodo", new { id = item.TodoId }, item);
}
}
Мой ListTodoController:
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Authorization;
using TodoApi.Context;
using TodoApi.Entities;
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TodoListController : ControllerBase
{
private readonly TodoContext _context;
public TodoListController(TodoContext context)
{
_context = context;
}
[HttpGet]
public ActionResult<List<TodoList>> GetAll()
{
return _context.TodoList.ToList();
}
[HttpGet("{id}", Name = "GetTodoList")]
public ActionResult<TodoList> GetById(int id)
{
var item = _context.TodoList.Find(id);
if (item == null)
{
return NotFound();
}
return item;
}
[HttpPost]
public IActionResult Create(TodoList item)
{
var todos = new List<Todo>();
item.Todos = todos;
_context.TodoList.Add(item);
_context.SaveChanges();
return CreatedAtRoute("GetTodo", new { id = item.TodoListId }, item);
}
}
}
И, наконец, мой TodoContext:
using Microsoft.EntityFrameworkCore;
using TodoApi.Entities;
namespace TodoApi.Context
{
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<Todo> Todo { get; set; }
public DbSet<User> User { get; set; }
public DbSet<TodoList> TodoList { get; set; }
}
}
Хорошо, теперь я объясню проблему:
Я создаю приложение -> все в порядке, нет ошибок, мой API доступен через почтальон
Я публикую новый чистый TodoList на конечной точке POST TodoList
Тело запроса json Полезная нагрузка:
{
"name": "TodoList Name",
"isComplete": false,
}
Ответ Body Api:
{
"todoListId": 1,
"name": "TodoList Name",
"todos": []
}
Я публикую новый Todo с предыдущим todoListId: 1 на конечной точке Todo
Запрос тела json Полезная нагрузка:
{
"name": "Todo Name",
"isComplete": false,
"todoListId": 1
}
Ответ Body Api:
{
"todoId": 1,
"name": "Todo Name",
"isComplete": false,
"todoListId": 1
}
Наконец-то моя проблема ... Теперь я пытаюсь получить свой TodoList на конечной точке GET / id TodoList
Ответ Body Api:
{
"todoListId": 1,
"name": "TodoList Name",
"todos": null
}
Не знаюЯ не понимаю, что я делаю неправильно, почему значение поля "todos" теперь равно нулю?