Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

147
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda