3.4 KiB
[!code-csharpMain]
The preceding code:
- Defines an empty controller class. In the next sections, methods are added to implement the API.
- The constructor uses Dependency Injection to inject the database context (
TodoContext
) into the controller. The database context is used in each of the CRUD methods in the controller. - The constructor adds an item to the in-memory database if one doesn't exist.
Getting to-do items
To get to-do items, add the following methods to the TodoController
class.
[!code-csharpMain]
These methods implement the two GET methods:
GET /api/todo
GET /api/todo/{id}
Here is an example HTTP response for the GetAll
method:
[
{
"id": 1,
"name": "Item1",
"isComplete": false
}
]
Later in the tutorial I'll show how the HTTP response can be viewed with Postman or curl.
Routing and URL paths
The [HttpGet]
attribute specifies an HTTP GET method. The URL path for each method is constructed as follows:
- Take the template string in the controller's
Route
attribute:
[!code-csharpMain]
- Replaces
[controller]
with the name of the controller, which is the controller class name minus the "Controller" suffix. For this sample, the controller class name is TodoController and the root name is "todo". ASP.NET Core routing isn't case sensitive. - If the
[HttpGet]
attribute has a route template (such as[HttpGet("/products")]
, append that to the path. This sample doesn't use a template. See Attribute routing with Http[Verb] attributes for more information.
In the GetById
method:
[!code-csharpMain]
"{id}"
is a placeholder variable for the ID of the todo
item. When GetById
is invoked, it assigns the value of "{id}" in the URL to the method's id
parameter.
Name = "GetTodo"
creates a named route. Named routes:
- Enable the app to create an HTTP link using the route name.
- Are explained later in the tutorial.
Return values
The GetAll
method returns an IEnumerable
. MVC automatically serializes the object to JSON and writes the JSON into the body of the response message. The response code for this method is 200, assuming there are no unhandled exceptions. (Unhandled exceptions are translated into 5xx errors.)
In contrast, the GetById
method returns the more general IActionResult
type, which represents a wide range of return types. GetById
has two different return types:
-
If no item matches the requested ID, the method returns a 404 error. Returning
NotFound
returns an HTTP 404 response. -
Otherwise, the method returns 200 with a JSON response body. Returning
ObjectResult
returns an HTTP 200 response.