Asp.net core 更改控制器.net核心的DisplayName

Asp.net core 更改控制器.net核心的DisplayName,asp.net-core,model-view-controller,controller,Asp.net Core,Model View Controller,Controller,我正在尝试使用以下命令更改mvc.Net Core应用程序中控制器或操作的显示名称: [DisplayName(“MyName”)]位于操作或控制器的顶部,但当我通过此代码发现并显示它们时: _actionDescriptorCollectionProvider .ActionDescriptors .Items .OfType<Contro

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

_actionDescriptorCollectionProvider
                         .ActionDescriptors
                         .Items
                         .OfType<ControllerActionDescriptor>()
                         .Select(a => new
                         {
                             a.DisplayName,
                             a.ControllerName,
                             a.ActionName,
                         
                         });
\u actionDescriptorCollectionProvider
.行动描述符
.项目
第()类
.选择(a=>新建
{
a、 显示名称,
a、 控制器名称,
a、 ActionName,
});
我仍然可以看到如下默认命名: “MyProject.Controllers.LoginController.Index(MyProject)”
为什么会这样?为什么它没有更改?

似乎
DisplayName
属性不尊重
DisplayNameAttribute
,即使查看属性所使用的属性,我也找不到任何方法来更改其行为

显然,你可以使用反射

//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();
//使用System.Reflection;
var result=\u actionDescriptorCollectionProvider
.行动描述符
.项目
第()类
.选择(a=>新建
{
DisplayName=a.MethodInfo.GetCustomAttribute()?.DisplayName??a.DisplayName,
a、 控制器名称,
a、 ActionName,
}).ToList();