更改控制器 .net 核心的显示名称

Changing DisplayName of controller .net core

我正在尝试使用以下方法更改我的 mvc .Net Core 应用程序中控制器或操作的显示名称: [DisplayName("MyName")] 在动作或控制器的顶部,但是当我通过以下代码发现并显示它们时:

_actionDescriptorCollectionProvider
                         .ActionDescriptors
                         .Items
                         .OfType<ControllerActionDescriptor>()
                         .Select(a => new
                         {
                             a.DisplayName,
                             a.ControllerName,
                             a.ActionName,
                         
                         });

我仍然看到这样的默认命名: “MyProject.Controllers.LoginController.Index(我的项目)” 为什么是这样?为什么它没有改变?

似乎 DisplayName 属性 不尊重 DisplayNameAttribute,即使在查看 TypeNameHelper 之后我也找不到任何方法来改变它的行为由 属性.

您可以做的显而易见的事情是使用反射

//using System.Reflection;
var result = _actionDescriptorCollectionProvider
    .ActionDescriptors
    .Items
    .OfType<ControllerActionDescriptor>()
    .Select(a => new
    {
        DisplayName = a.MethodInfo.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName ?? a.DisplayName,
        a.ControllerName,
        a.ActionName,

    }).ToList();