404在常规路由中不存在问题

时间:2019-05-09 07:23:39

标签: asp.net-core

我正在使用VS Code和dotnet CLI工具遵循microsoft.com(https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio)中的教程。我无法通过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();
        }
...

不知道为什么惯例[controller]不起作用。

1 个答案:

答案 0 :(得分:1)

这是因为您的控制器名称是 TodoContoller ,而不是 TodoController

要解决此问题,请按如下所示更改代码:

    public class TodoContoller : ControllerBase 
    public class TodoController : ControllerBase
    {
        ...

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