You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
aspnet-basics/2-controllers-and-http-resp...

3.9 KiB

marp paginate math theme title
true true mathjax buutti 2. Controllers and HTTP Responses

Controllers and HTTP responses

Controller-based API

Controllers

  • Controllers are classes that derive from the ControllerBase class
  • In the project template, we had this controller:
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    
  • ControllerBase provides many properties and methods for handling HTTP requests
  • Inside the class, we can create methods that correspond to different endpoints (see Lecture 1: Routing and endpoints)
    • These are called result methods

Result methods

  • Result methods return ActionResult objects
    • For example, a CreatedAtAction returns the 201 status code
    • All ActionResult objects implement the IActionResult interface
    • Includes at least a status code, and can contain data such as view items or an error message
  • This result is processed into a response to then sent to client
  • There are multiple possible status codes for each action (See the following table)

Some result methods

Status Code Result Method Usage
200 - OK Ok() GET, DELETE
201 - Created Created() POST
204 - No content NoContent() PUT, PATCH
400 - Bad request BadRequest() POST, PUT, PATCH
404 - Not found NotFound() All actions
Custom StatusCode() All actions

Result methods: An example

[HttpGet("{id}")]
public IActionResult GetContactById(int id)
{
  // Contacts = list of contact objects, fetched from some repository
  var contact = Contacts.FirstOrDefault(c => c.Id == id);
  if (contact == null)
  {
    return NotFound();
  }
  return Ok(contact);
}

  • The previous code first attempts to find a Contacts object using the ID provided in the URI parameter
    • If an item is not found, a 404 response is returned using NotFound() w:700
    • Otherwise, the object is sent as a payload with a 200 OK code response using Ok(contact) w:700

Exercise 1: Returning status codes

  1. Without using parameter constraints, modify your number list method from Lecture 1, Exercise 3 to return a status code 400 (Bad Request) if k is smaller than 1 or larger than 100.
  2. Add a helpful error message to the result for both cases. The message should be seen as a message body in the response.
  3. Test with Swagger/Postman.