首页 > 解决方案 > 404 Not Found in 常规路由

问题描述

我正在使用 VS Code关注 microsoft.com( https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-2.2&tabs=visual-studio )中的教程和 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();
        }
...

不知道为什么约定 [控制器] 不起作用。

标签: asp.net-core

解决方案


那是因为您的控制器名称TodoContoller不是TodoController.

要修复它,请更改您的代码,如下所示:

    公共类 TodoContoller : ControllerBase
    公共类 TodoController : ControllerBase
    {
        ...

        公共 TodoContoller(TodoContext 上下文)
        公共 TodoController(TodoContext 上下文)
        {
            _context = 上下文;
            if (_context.TodoItems.Count() == 0)
            {
                _context.TodoItems.Add(new TodoItem { Name = "Item1" });
                _context.SaveChanges();
            }
        }
    }

推荐阅读