我正在关注位于此处的教程:non-blocking write method
我在iis express中运行web api并使用邮递员使用以下路径调用它:
https://docs.asp.net/en/latest/tutorials/first-web-api.html
这个调用命中构造函数,然后以某种方式调用
GetAll
函数,它从未被调用,甚至没有HttpGet
动词。 如何调用?
namespace TodoApi.Controllers
{
[Route("api/[controller]")]
public class TodoController : Controller
{
public TodoController(ITodoRepository todoItems)
{
TodoItems = todoItems;
}
public IEnumerable<TodoItem> GetAll()
{
return TodoItems.GetAll();
}
[HttpGet("{id}", Name="GetTodo")]
public IActionResult GetById(string id)
{
var item = TodoItems.Find(id);
if (item == null)
return HttpNotFound();
return new ObjectResult(item);
}
public ITodoRepository TodoItems { get; set; }
}
}
答案 0 :(得分:1)
控制器中的所有方法都是默认的HttpGet。您不需要明确指定HttpGet动词。 如果您使用WebApiConfig中指定的默认路由并调用http://localhost:5056/api/todo,它将路由到控制器中的第一个无参数函数。在你的情况下GetAll()。
如果要指定路由,可以使用RoutePreFix和Route
属性namespace TodoApi.Controllers
{
[RoutePrefix("api/[controller]")]
public class TodoController : Controller
{
public TodoController(ITodoRepository todoItems)
{
TodoItems = todoItems;
}
Route("First")]
public IEnumerable<TodoItem> GetAll1()
{
return TodoItems.GetAll();
}
[Route("Second")]
public IEnumerable<TodoItem> GetAll2()
{
return TodoItems.GetAll();
}
[HttpGet("{id}", Name="GetTodo")]
public IActionResult GetById(string id)
{
var item = TodoItems.Find(id);
if (item == null)
return HttpNotFound();
return new ObjectResult(item);
}
public ITodoRepository TodoItems { get; set; }
}
并调用方法:
http://localhost:5056/api/todo/first
http://localhost:5056/api/todo/second
您可以阅读更多相关信息here