я пишу этот код для поиска списка контроллеров в моем проекте.
public IEnumerable<Type> GetControllerDescovery(Assembly assemblies)
{
var controllers = assemblies.GetExportedTypes()
.Where(t => typeof(ControllerBase)
.IsAssignableFrom(t))
.Select(t => t).
ToList();
return controllers;
}
и он показывает мне этот вывод:
"IranNews.Controllers.V1.CategoryController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"IranNews.Controllers.V1.RoleManagerController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"IranNews.Controllers.V1.UserController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"IranNews.Controllers.V1.ValuesController, IranNews, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
но мне нужно получить имя контроллера от [Display(Name = "UserManager")]
и покажи мне это : UserManager
как я могу это сделать ?????
@PanagiotisKanavos я использую веб-API
Какое тогда вам нужно отображаемое имя? Что ты пытаешься сделать? В любом случае Показать имя является атрибутом. Вам нужно вызвать t.GetCustomAttribute<DisplayAttribute>()
для типа или свойства, чтобы получить его и прочитать его значение.
@PanagiotisKanavos я хочу создать динамическое разрешение. Я хочу, чтобы названия меню отображались в названии контроллеров
Я подозреваю, что это случай проблема XY. У вас есть проблема с X, и вы думаете, что Y — это решение. Когда это не работает, вы спрашиваете об Y, а не о X. Есть много повторяющихся вопросов, которые показывают, как получить значения атрибутов с помощью отражения, в данном случае это просто не имеет смысла. DisplayName
используется на объекты данных и моделях просмотра, чтобы упростить их визуализацию. В контроллере он бесполезен. Это никак не влияет на MVC. Он никогда не появится на маршруте
@PanagiotisKanavos Пожалуйста, скажите мне прямо, как я могу это решить?
@kianoush ты проверил мое обновление?
Попробуй это:
typeof(ControllerBase)
.GetProperties()
.Select(x => x.GetCustomAttribute<DisplayAttribute>())
.Where(x => x != null)
.Select(x => x.Name)
.ToList();
Обновлять: Вот рабочий пример:
Assembly.GetExecutingAssembly().GetExportedTypes()
.Where(t => typeof(ControllerBase).IsAssignableFrom(t))
.Select(t => t.GetCustomAttribute<DisplayAttribute>())
.Where(x => x != null)
.Select(x => x.Name)
.ToList();
Контроллеры не имеют отображаемых имен.
DisplayName
— это атрибут, используемый с моделями, а не с контроллерами. Если вы проверите все руководства по MVC, вы увидите, что они начинаются с установки желаемого заголовка с помощьюViewBag.Title
, а затем отображают его в представлении как заголовок браузера или заголовок. В более сложных учебниках может отображаться свойство модели.