Asp.net core 如何在ASP.NET Core identity中更改视图中区域、控制器和操作的显示名称?
我想为角色创建一个动态标识,管理员可以添加对角色的访问权限。我创建了它,它工作正常,但在视图中它显示了每个区域、控制器和操作的实际名称。我想将这些名称更改为另一种显示语言,但我想在表中插入实际名称。我该怎么做?我找了很多,但找不到任何解决办法 这是返回所有区域、控制器和操作名称的类和方法:Asp.net core 如何在ASP.NET Core identity中更改视图中区域、控制器和操作的显示名称?,asp.net-core,asp.net-identity,identity,Asp.net Core,Asp.net Identity,Identity,我想为角色创建一个动态标识,管理员可以添加对角色的访问权限。我创建了它,它工作正常,但在视图中它显示了每个区域、控制器和操作的实际名称。我想将这些名称更改为另一种显示语言,但我想在表中插入实际名称。我该怎么做?我找了很多,但找不到任何解决办法 这是返回所有区域、控制器和操作名称的类和方法: public class MvcUtilities : IMvcUtilities { /// <summary> /// Will add all area and contro
public class MvcUtilities : IMvcUtilities
{
/// <summary>
/// Will add all area and controller and action names into a List of tuple.
/// </summary>
public MvcUtilities(IActionDescriptorCollectionProvider actionDescriptorCollectionProvider)
{
var actionDescriptors = actionDescriptorCollectionProvider.ActionDescriptors.Items;
foreach (var actionDescriptor in actionDescriptors)
{
var descriptor = actionDescriptor as ControllerActionDescriptor;
if (descriptor == null) continue;
var controllerTypeInfo = descriptor.ControllerTypeInfo;
//var actionMethodInfo = descriptor.MethodInfo;
ValueTuples.Add((controllerTypeInfo.GetCustomAttribute<AreaAttribute>()?.RouteValue,
descriptor.ControllerName,
descriptor.ActionName));
}
}
public IList<(string areaName, string controllerName, string actionName)> ValueTuples { get; }
= new List<(string areaName, string controllerName, string actionName)>();
public IList<ActionAndControllerName> AreaAndActionAndControllerNamesList()
{
var list = ValueTuples.Distinct().Select(t => new ActionAndControllerName()
{
AreaName = t.areaName,
ControllerName = t.controllerName+"Controller",
ActionName = t.actionName
});
return list.Where(l=>(l.ControllerName!="AccountController")&&(l.ActionName!="Management"))
.OrderByDescending(ar=>ar.AreaName).ThenBy(c=>c.ControllerName).ThenBy(a=>a.ActionName).ToList();
}
公共类MVC实用程序:IMvcUtilities
{
///
///将所有区域、控制器和操作名称添加到元组列表中。
///
公共MVcutility(IActionDescriptorCollectionProvider操作描述符CollectionProvider)
{
var actionDescriptors=actionDescriptorCollectionProvider.actionDescriptors.Items;
foreach(actionDescriptors中的var actionDescriptor)
{
var descriptor=作为ControllerActionDescriptor的actionDescriptor;
如果(描述符==null)继续;
var controllerTypeInfo=descriptor.controllerTypeInfo;
//var actionMethodInfo=descriptor.MethodInfo;
添加((controllerTypeInfo.GetCustomAttribute()?.RouteValue,
descriptor.ControllerName,
描述符(ActionName));
}
}
公共IList值元组{get;}
=新列表();
公共IList区域和操作与控制器列表()
{
var list=ValueTuples.Distinct().Select(t=>newactionAndControllerName()
{
AreaName=t.AreaName,
ControllerName=t.ControllerName+“控制器”,
ActionName=t.ActionName
});
返回列表。其中(l=>(l.ControllerName!=“AccountController”)&&(l.ActionName!=“Management”))
.OrderByDescending(ar=>ar.AreaName).ThenBy(c=>c.ControllerName).ThenBy(a=>a.ActionName).ToList();
}
这只是您管理操作的设计,因此基本上与标识无关。您拥有原始信息(操作名称、控制器名称、区域名称),如果您想显示一些友好或翻译的名称,只需声明一个服务来转换名称。这甚至可以简化为本地化或翻译问题。