我正在使用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]不起作用。
答案 0 :(得分:1)
这是因为您的控制器名称是 TodoContoller
,而不是 TodoController
。
要解决此问题,请按如下所示更改代码:
public class TodoContoller : ControllerBasepublic 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(); } } }