2017-07-08 6 views
2

J'essaie d'ajouter un en-tête aux réponses d'une API Web de base .Net lorsqu'une exception se produit.Ajout d'un en-tête de réponse dans un objet ExceptionFilterAttribute dans ASP .Net Core

J'utilise un ExceptionFilterAttribute ...

public class ExceptionFilter : ExceptionFilterAttribute 
{ 
    public override void OnException(ExceptionContext context) 
    { 
     context.HttpContext.Response.Headers.Add("CorrelationId", "12345"); 
     base.OnException(context); 
    } 
} 

Pour une raison quelconque l'en-tête n'est pas envoyé au client. Je suppose que c'est quelque chose à voir avec les réponses déjà formées à ce moment-là afin qu'elles ne puissent pas être changées?

J'ai un middleware personnalisé qui ajoute un ID de corrélation au contexte de la requête et le sort ensuite dans les en-têtes de réponse. Cela ne se déclenche pas lorsqu'une exception se produit bien que j'ai besoin d'une autre façon de le faire, donc d'essayer d'utiliser le filtre.

Que dois-je changer pour que cela fonctionne?

Répondre

1

EXPLICITEMENT context.Result pour écrire la sortie d'un filtre d'exception:

public override void OnException(ExceptionContext context) 
{ 
    context.HttpContext.Response.Headers.Add("CorrelationId", new string[] { "12345" }); 

    context.Result = new ObjectResult(null) { StatusCode = 500 }; 
    context.ExceptionHandled = true; 

    base.OnException(context); 
} 

Cela va ajouter l'en-tête de la réponse réelle.