rest web api 2在没有调用的情况下调用action方法

时间:2016-06-03 07:38:29

标签: c# rest asp.net-web-api2

我正在关注位于此处的教程: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; }
    }
}

1 个答案:

答案 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