Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
extraño comportamiento que tienen los filtros al atender cada solicitud

a continuación hay un código simple:

 [SimpleFilter] public class MyController : ControllerBase { public MyController() { <---------- I put a debugger here } [Route("")] public string Get() { return DateTime.Now.ToLongTimeString(); } } public class SimpleFilterAttribute : Attribute, IAsyncResourceFilter { public SimpleFilterAttribute() { // <---------- I put a debugger here } public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next) { ... } }

Entonces, sabemos que cuando la aplicación se está ejecutando, creará una nueva instancia de controlador para manejar cada solicitud, por lo que si hago 5 solicitudes, entonces se actualizarán 5 instancias de MyController , puedo verificarlo colocando un depurador en el constructor de MyController, cada vez que el control va al depurador.

Así que asumo que también debería pasar lo mismo con el filtro, se creará una nueva instancia de Fiter para manejar cada nueva solicitud, pero suceden cosas extrañas como las siguientes:

1-Cuando la aplicación se inicia por primera vez, el constructor de SimpleFilter se invoca dos veces, lo que significa que se actualizaron dos instancias de SimpleFilter , entonces, ¿por qué la aplicación crea dos instancias de este filtro?

2-Después de que la aplicación se está ejecutando, cada vez que hago una nueva solicitud, no se crea una nueva instancia de SimpleFilter, parece que se usa una sola instancia de filtro para manejar todas las solicitudes, ¿es cierto? Si es cierto, ¿por qué necesitamos una nueva instancia de controlador para cada solicitud mientras que solo se necesita una única instancia de filtro para todas las solicitudes?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Pregunta interesante sobre dos veces llamado constructor de filtros.

Parece que es un comportamiento específico de CLR, no aspnet-core . Cada vez que se llama TypeInfo.GetCustomAttributes() , se crea una instancia de atributo.

Puedes comprobarlo tú mismo llamando

 var typeInfo = typeof(MyController).GetTypeInfo(); var attribes = typeInfo.GetCustomAttributes();

Y mientras se construye la información del controlador, se llama a TypeInfo.GetCustomAttributes() al menos 2 veces https://github.com/dotnet/aspnetcore/blob/main/src/Mvc/Mvc.Core/src/ApplicationModels/DefaultApplicationModelProvider.cs#L110

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda