Создание действия (C#)

от Корпорации Майкрософт

Узнайте, как добавить новое действие в контроллер MVC ASP.NET. Узнайте о требованиях к методу, который должен быть действием.

Цель этого руководства — объяснить, как создать новое действие контроллера. Вы узнаете о требованиях метода действия. Вы также узнаете, как предотвратить предоставление метода в качестве действия.

Добавление действия в контроллер

Вы добавляете новое действие в контроллер путем добавления нового метода в контроллер. Например, контроллер в листинге 1 содержит действие с именем Index() и действие SayHello(). Оба метода предоставляются в виде действий.

Листинг 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!";
        }
    }
}

Чтобы быть подверженным вселенной в качестве действия, метод должен соответствовать определенным требованиям:

  • Метод должен быть открытым.
  • Метод не может быть статическим.
  • Метод не может быть методом расширения.
  • Метод не может быть конструктором, методом получения или методом задания.
  • Метод не может иметь открытые универсальные типы.
  • Метод не является методом базового класса контроллера.
  • Метод не может содержать параметры ref или out .

Обратите внимание, что нет ограничений на тип возвращаемого значения действия контроллера. Действие контроллера может возвращать строку, значение DateTime, экземпляр класса Random или void. Платформа ASP.NET MVC преобразует любой тип возвращаемого значения, который не является результатом действия, в строку и отрисовывает строку в браузере.

При добавлении к контроллеру любого метода, который не нарушает эти требования, метод предоставляется как действие контроллера. Будьте осторожны здесь. Действие контроллера может вызывать любой пользователь, подключенный к Интернету. Не создавайте, например, действие контроллера DeleteMyWebsite().

Предотвращение вызова открытого метода

Если необходимо создать открытый метод в классе контроллера и вы не хотите предоставлять метод в качестве действия контроллера, можно запретить вызов метода с помощью атрибута [NonAction]. Например, контроллер в листинге 2 содержит открытый метод с именем CompanySecrets(), украшенный атрибутом [NonAction].

Листинг 2. Controllers\WorkController.cs

using System.Web.Mvc;

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

Если вы попытаетесь вызвать действие контроллера CompanySecrets(), введя /Work/CompanySecrets в адресной строке браузера, вы получите сообщение об ошибке на рис. 1.

Вызов метода NonAction

Рис. 01. Вызов метода NonAction(Щелкните для просмотра полноразмерного изображения)