es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener el valor del atributo displayname desde el controlador?

Tengo un atributo DisplayName en la parte superior del controlador. Mi principal necesidad es establecer un apodo para los controladores de manera que, cuando obtenga todos los controladores, pueda acceder al apodo además del nombre original.

Uno de varios controladores:

[Route(“api/[controller]”)]
[ApiController]
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[DisplayName(“Nombre de prueba”)]
public class RolesController : ControllerBase
{

}

Mi método:

public IList AreaAndActionAndControllerNamesList()
{
var endpoints = endpointSources
.SelectMany(es => es.Endpoints)
.OfType();
var output = endpoints.Select(
e =>
{
var controller = e.Metadata
.OfType()
.FirstOrDefault();

        return new
        {
            Controller = controller.ControllerName,  
            ControllerDisplayName = controller.MethodInfo.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName,   
        };
    }

Pero devuelve un valor nulo (ControllerDisplayName). ¿Qué necesita cambiar?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Necesitas agregar el DisplayNameAttribute a la clase del controlador, así:

    [Route("api/[controller]")]
    [ApiController]
    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    [DisplayName("Nombre de prueba")]
    public class RolesController : ControllerBase
    
    ...
    
    

    Luego puedes acceder al apodo junto al nombre original en tu método:

    public IList<actionandcontrollername> AreaAndActionAndControllerNamesList()</actionandcontrollername>
    
    <pre><code>var endpoints = endpointSources
    .SelectMany(es => es.Endpoints)
    .OfType<RouteEndpoint>();
    var output = endpoints.Select(
        e =>
    
            var controller = e.Metadata
                .OfType<ControllerActionDescriptor>()
                .FirstOrDefault();
    
            return new
    
                Controller = controller.ControllerName,  
                ControllerDisplayName = controller.MethodInfo.GetCustomAttribute<DisplayNameAttribute>()?.DisplayName,   
            ;
    </code></pre>
    
    

Comments are closed.