Crear una acción (C#)

por Microsoft

Obtenga información sobre cómo agregar una nueva acción a un controlador MVC ASP.NET. Obtenga información sobre los requisitos para que un método sea una acción.

El objetivo de este tutorial es explicar cómo se puede crear una nueva acción de controlador. Obtendrá información sobre los requisitos de un método de acción. También aprenderá a evitar que un método se exponga como una acción.

Adición de una acción a un controlador

Agregar una nueva acción a un controlador mediante la adición de un nuevo método al controlador. Por ejemplo, el controlador del listado 1 contiene una acción denominada Index() y una acción denominada SayHello(). Ambos métodos se exponen como acciones.

Listado 1 - Controllers-HomeController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public string SayHello()
        {
            return "Hello!";
        }
    }
}

Para estar expuesto al universo como una acción, un método debe cumplir ciertos requisitos:

  • El método debe ser público.
  • El método no puede ser un método estático.
  • El método no puede ser un método de extensión.
  • El método no puede ser un constructor, getter o setter.
  • El método no puede tener tipos genéricos abiertos.
  • El método no es un método de la clase base del controlador.
  • El método no puede contener parámetros ref o out.

Tenga en cuenta que no hay restricciones en el tipo de valor devuelto de una acción de controlador. Una acción de controlador puede devolver una cadena, un DateTime, una instancia de la Random clase o void. El marco de ASP.NET MVC convertirá cualquier tipo de valor devuelto que no sea un resultado de acción en una cadena y representará la cadena en el explorador.

Cuando se agrega cualquier método que no infringe estos requisitos a un controlador, el método se expone como una acción de controlador. Ten cuidado aquí. Cualquier persona conectada a Internet puede invocar una acción de controlador. Por ejemplo, no cree una acción de controlador DeleteMyWebsite().

Evitar que se invoque un método público

Si necesita crear un método público en una clase de controlador y no desea exponer el método como una acción de controlador, puede evitar que se invoque el método mediante el atributo [NonAction]. Por ejemplo, el controlador del listado 2 contiene un método público denominado CompanySecrets() que está decorado con el atributo [NonAction].

Listado 2 - Controllers-WorkController.cs

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class WorkController : Controller
    {
        [NonAction]
        public string CompanySecrets()
        {
            return "This information is secret.";
        }
    }
}

Si intenta invocar la acción del controlador CompanySecrets() escribiendo /Work/CompanySecrets en la barra de direcciones de su navegador, obtendrá el mensaje de error en la Figura 1.

Invocar un método NonAction

Figura 01: Invocar un método NonAction(Hagaclic para ver la imagen de tamaño completo)