404 Not Foud в обычной маршрутизации - PullRequest
0 голосов
/ 09 мая 2019

Я следую учебному пособию на microsoft.com (https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio) с инструментами VS Code и dotnet CLI. Я не могу получить доступ к этому контроллеру через URL-адрес: https://localhost:5001/api/Todo.

namespace TodoApi2.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class TodoContoller : ControllerBase
    {
        private readonly TodoContext _context;

        public TodoContoller(TodoContext context)
        {
            _context = context;
            if (_context.TodoItems.Count() == 0)
            {
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        }

        [HttpGet]
        public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
        {
            return await _context.TodoItems.ToListAsync();
        }
...

Но следующие работы

namespace TodoApi2.Controllers
{
    [Route("api/Todo")]
    [ApiController]
    public class TodoContoller : ControllerBase
    {
        private readonly TodoContext _context;

        public TodoContoller(TodoContext context)
        {
            _context = context;
            if (_context.TodoItems.Count() == 0)
            {
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        }

        [HttpGet]
        public async Task<ActionResult<IEnumerable<TodoItem>>> GetTodoItems()
        {
            return await _context.TodoItems.ToListAsync();
        }
...

Не знаю, почему соглашение [контроллер] не работает.

1 Ответ

1 голос
/ 09 мая 2019

Это потому, что имя вашего контроллера TodoContoller вместо TodoController.

Чтобы исправить это, измените код, как показано ниже:

    <strike>public class TodoContoller : ControllerBase </strike>
    public class TodoController : ControllerBase
    {
        ...

        <strike>public TodoContoller(TodoContext context) </strike>
        public TodoController(TodoContext context) 
        {
            _context = context;
            if (_context.TodoItems.Count() == 0)
            {
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...