2016-03-30 4 views
0

Je dois appliquer un filtre à la demande. J'ai créé une sous-classe de ActionFilterAttribute avec OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) à priorité. J'ai une logique un peu sophistiquée à l'intérieur du filtre et dans certains cas, je dois arrêter le fonctionnement du filtre et retourner le résultat de l'action par défaut (comme s'il n'y avait pas de filtre). Si je return dans le filtre, le flux de travail semble s'arrêter complètement, aucun résultat d'action ne retourne. J'ai essayé de await next() ou appelez base.OnActionExecutionAsync(...), mais cela n'a pas fonctionné. Comment puis-je implémenter le retour du filtre? J'ai quelque chose comme ceci:ASP.Net Core Retour d'un filtre d'action

public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
    { 
     //some logic 

     if (questionnaireId == Guid.Empty) 
     { 
      //here I need to let the mvc action run normally 
      return;//it doesn't work 
     } else { 
      //some logic.. 
     }    
    } 
+0

Pouvez-vous poster votre code? Et pourquoi voulez-vous implémenter un 'ActionFilter', peut-être un' middleware' est un meilleur choix –

+0

@aguafrommars Je doute d'un middleware parce que ma logique traite uniquement de MVC et je ne voudrais pas ajouter un autre gestionnaire dans le pipeline pour l'ensemble de l'application – Slip

Répondre

1

pour résultat par défaut retour ajouter await base.OnActionExecutionAsync(context, next);

public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) 
{ 
    //some logic 

    if (questionnaireId == Guid.Empty) 
     await base.OnActionExecutionAsync(context, next); 
    else { 
     //some logic.. 
    } 
}