Цель 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]
имеет множество преимуществ, таких как:
- Вы можете настроить имя вашего метода и дать ему любое имя по вашему выбору, как в примере выше.
- Вы можете использовать этот атрибут, если хотите скрыть свое реальное имя метода от пользователя, как указано выше.
- Visual Studio выдает ошибку, когда вы используете
hyphen
"-" в имени метода, использование строчных букв скажет "Naming rule violation"
и так далее. В таких случаях этот атрибут очень помогает.
Примечание. Метод View() по умолчанию ищет подходящее имя метода/действия, поэтому мы передаем реальное имя метода в качестве параметра при возврате представления.