Цель ActionName

В чем преимущество установки псевдонима для метода действия с использованием атрибута "ActionName"? Я действительно не вижу в этом большой пользы, предоставляя пользователю возможность вызвать метод действия с каким-то другим именем. После указания псевдонима пользователь может вызвать метод действия только с использованием псевдонима. Но если это требуется, то почему пользователь не меняет имя метода действия, а затем указывает для него псевдоним?

Я был бы очень признателен, если бы кто-нибудь мог предоставить мне пример использования "ActionName" в сценарии, где он может принести большую пользу или его лучше использовать.

Ответ 1

Это позволяет вам начинать действие с номера или включать любой символ, который .net не разрешает в идентификаторе. - Наиболее распространенная причина заключается в том, что он позволяет иметь две действия с одной и той же сигнатурой (см. Действия GET/POST Delete любого контроллера леса)

Например: вы можете разрешить тире внутри имени вашего URL-адреса http://example.com/products/create-product vs http://example.com/products/createproduct или http://example.com/products/create_product.

public class ProductsController {

    [ActionName("create-product")]
    public ActionResult CreateProduct() {
        return View();
    }

}

Ответ 2

Это также полезно, если у вас есть два действия с одной и той же сигнатурой, которые должны иметь одинаковый URL.

Простой пример:

public ActionResult SomeAction()
{
    ...
}

[ActionName("SomeAction")]
[HttpPost]
public ActionResult SomeActionPost()
{
    ...
}

Ответ 3

Я использую его, когда пользователь загружает отчет, чтобы он мог легко открыть свой файл csv непосредственно в Excel.

[ActionName("GetCSV.csv")]
public ActionResult GetCSV(){
    string csv = CreateCSV();
    return new ContentResult() { Content = csv, ContentEncoding = System.Text.Encoding.UTF8, ContentType = "text/csv" };
}

Ответ 4

Атрибуты ActionName используются для отображения методов действий .NET с разными именами во внешний мир. В приведенных ниже обстоятельствах вы можете использовать атрибуты ActionName:

  • Для SEO (поисковая оптимизация) вы хотите показать более значимое имя действия в URL-адресе, чем имя метода действия .NET.

  • Чтобы предотвратить перегрузку функций, связанных с проблемами. Предположим, у вас есть имя метода действия DELETE, методы GET и POST которого принимают тот же параметр. В этом случае вы получите ошибку времени компиляции. Чтобы решить проблему, вы можете переименовать свой метод .NET и атрибут ActionName, вы все равно можете поддерживать одно и то же имя.

Для получения более подробного объяснения посетите атрибут ActionName в ASP.NET MVC

Ответ 5

Попробуйте этот код:

public class ProductsController
 {

    [ActionName("create-product")]
    public ActionResult CreateProduct() 
    {
        return View("CreateProduct");
    }

}

Ответ 6

Этот класс представляет атрибут, который используется для имени действия. Он также позволяет разработчикам использовать другое имя действия, чем имя метода.

Ответ 7

Это также полезно, когда вам нужно реализовать перегрузку методов.

 public ActionResult ActorView()
        { 

            return View(actorsList);
        }


        [ActionName("ActorViewOverload")]
        public ActionResult ActorView(int id)
        {              
            return RedirectToAction("ActorView","Home");
        }
`

Здесь один ActorView не принимает никаких параметров, а другой принимает int.  Первый метод, используемый для просмотра списка участников и другого, используется для отображения одного и того же списка участников после удаления элемента с идентификатором "id".  Вы можете использовать имя действия как "ActorViewOverload", если вам нужна перегрузка метода.

Ответ 8

Селекторы действий: Селектор действий - это атрибут, который можно применять к методам действий. Это помогает механизму маршрутизации выбрать правильный метод действия для обработки определенного запроса. MVC 5 включает в себя следующие атрибуты селектора действий:

  • ActionName
  • Бездействие
  • Глаголы действия

ActionName: атрибут ActionName позволяет нам указать имя действия, отличное от имени метода. Рассмотрим следующий пример.

public class StudentController : Controller
{
     //1.
     [ActionName("find")]
     public ActionResult GetById(int id)
     {
         return View("GetById");
     }

     //2.
     [ActionName("BadRequest")]
     public ActionResult Error()
     {
         return View("Error");
     }

     //3.
     [ActionName("students-list")]
     public ActionResult StudentsList()
     {
      return View("StudentsList");
     }
 }

[ActionName] имеет множество преимуществ, таких как:

  1. Вы можете настроить имя вашего метода и дать ему любое имя по вашему выбору, как в примере выше.
  2. Вы можете использовать этот атрибут, если хотите скрыть свое реальное имя метода от пользователя, как указано выше.
  3. Visual Studio выдает ошибку, когда вы используете hyphen "-" в имени метода, использование строчных букв скажет "Naming rule violation" и так далее. В таких случаях этот атрибут очень помогает.

Примечание. Метод View() по умолчанию ищет подходящее имя метода/действия, поэтому мы передаем реальное имя метода в качестве параметра при возврате представления.