This article has been localized into Spanish by the community.
Acciones
Ya que un Controller es una clase regular de .NET, puede tener campos, propiedades y métodos. Especialmente los métodos de una clase Controller son interesantes, porque son la conexión entre el explorador (y por lo tanto el usuario) y tu aplicación. Por esa razón, los métodos de un Controller son referidos como acciones - un método usualmente corresponde a una acción en tu aplicación, el cual luego retorna algo al explorador/usuario.
Ya que un explorador trabaja llamando una URL, necesitas algo que traduce URLs a un Controller correspondiente y una acción (método). Por ejemplo, el explorador puede solicitar una URL como /products/1/ y luego tu que tu ProductsController maneje esta solicitud con un método/acción llamado Details. Esto es hecho con el concepto de ruteo, algo sobre lo que hablaremos mucho mas en alguna parte de este tutorial, pero por ahora, solo conoce que el Enrutamiento o Ruteo es lo que conecta las URLs con las acciones en tus Controllers.
Cuando creas un Controller, ten en mente que todos los métodos públicos en una clase Controller es considerada una Action. Esto significa que si has definido tus reglas de ruteo atrapa-todo para tu Controller (y eso es algo común de hacer), todos los métodos en tu Controller que no quieras que el usuario final pueda llamar, asegurate de marcarlo como private o privado. Como una alternativa, si realmente necesitas un método público pero inaccesible por URL, puedes marcar el método con el atributo [NonAction].
Verbos de acción
Para tener mas control de como tus acciones son llamadas, puedes decorarlas con los llamados Verbos de Accion. Estos son, de hecho, atributos regulares de .NET, los cuales le dicen a .NET como una acción puede ser accesada. Sin estos atributos, una acción puede ser accedida usando todos los posibles verbos HTTP (los más comunes son GET y POST), pero puedes cambiarlo bastante fácil.
[HttpGet]
public IActionResult Edit()
{
return Content("Edit");
}
Ahora la acción Editar solo puede ser accedida con una solicitud GET. Esto tiene el beneficio adicional de permitirte tener múltiples métodos con el mismo nombre, siempre y cuando ellos no acepten el mismo método de solicitud. Así que, por ejemplo, puedes tener dos métodos Edit: El primero podría estar disponible para solicitudes GET y generar la FORM o formulario para editar un elemento, mientras que el segundo podría solamente estar disponible para solicitudes POST y ser usado para actualizar el elemento cuando el FORM o formulario sea regresada al servidor. Eso podría verse así:
[HttpGet]
public IActionResult Edit()
{
return View();
}
[HttpPost]
public IActionResult Edit(Product product)
{
product.Save();
return Content("Product updated!");
}
Ahora cada vez que una petición sea hecha al método/acción Edit, el método actual que responde la solicitud estará basado en un método GET o en un método POST.
En algunas situaciones, puedes querer especificar verbos de acción múltiple, por ejemplo para especificar que una acción puede ser accedida por solicitudes POST y GET pero no por otros tipos. Eso es tan sencillo como:
[HttpGet]
[HttpPost]
public IActionResult Edit()
{
...
Resumen
Ahora hemos aprendido más sobre uno de los aspectos más importantes de un Controller: Las Acciones, a veces referidas como Métodos de Acción (Action Methods) o simplemente métodos, ya que básicamente son eso. En el siguiente artículo discutiremos el resultado de estas acciones, referidos como Resultados de Acción (Action Result).