Criar uma ação (C#)

pela Microsoft

Saiba como adicionar uma nova ação a um controlador MVC ASP.NET. Saiba mais sobre os requisitos para que um método seja uma ação.

O objetivo deste tutorial é explicar como você pode criar uma nova ação do controlador. Você aprenderá sobre os requisitos de um método de ação. Você também aprenderá a impedir que um método seja exposto como uma ação.

Adicionando uma ação a um controlador

Adicione uma nova ação a um controlador adicionando um novo método ao controlador. Por exemplo, o controlador na Listagem 1 contém uma ação chamada Index() e uma ação chamada SayHello(). Ambos os métodos são expostos como ações.

Listagem 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 ser exposto ao universo como uma ação, um método deve atender a determinados requisitos:

  • O método deve ser público.
  • O método não pode ser um método estático.
  • O método não pode ser um método de extensão.
  • O método não pode ser um construtor, getter ou setter.
  • O método não pode ter tipos genéricos abertos.
  • O método não é um método da classe base do controlador.
  • O método não pode conter parâmetros ref ou out .

Observe que não há restrições no tipo de retorno de uma ação do controlador. Uma ação do controlador pode retornar uma cadeia de caracteres, um DateTime, uma instância da classe Random ou void. O ASP.NET estrutura MVC converterá qualquer tipo de retorno que não seja um resultado de ação em uma cadeia de caracteres e renderizará a cadeia de caracteres para o navegador.

Quando você adiciona qualquer método que não viole esses requisitos a um controlador, o método é exposto como uma ação do controlador. Tenha cuidado aqui. Uma ação do controlador pode ser invocada por qualquer pessoa conectada à Internet. Não crie, por exemplo, uma ação de controlador DeleteMyWebsite().

Impedindo que um método público seja invocado

Se você precisar criar um método público em uma classe de controlador e não quiser expor o método como uma ação do controlador, poderá impedir que o método seja invocado usando o atributo [NonAction]. Por exemplo, o controlador na Listagem 2 contém um método público chamado CompanySecrets() decorado com o atributo [NonAction].

Listagem 2 – Controllers\WorkController.cs

using System.Web.Mvc;

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

Se você tentar invocar a ação do controlador CompanySecrets() digitando /Work/CompanySecrets na barra de endereços do navegador, receberá a mensagem de erro na Figura 1.

Invocando um método NonAction

Figura 01: Invocando um método NonAction (clique para exibir a imagem em tamanho real)