J'ai googlé et stackoverflowed cette question beaucoup et ses différentes variantes, mais je suis encore confus si c'est possible du tout. Je veux juste ajouter un en-tête personnalisé à toutes les actions ayant un attribut spécifique. Cela semble simple? Mais ce n'est pas. Je viens d'écrire ce qui suit:Ajouter un en-tête personnalisé pour une action dans MVC
[AttributeUsage(AttributeTargets.Method)]
public class HelloWorldAttribute : ActionFilterAttribute
{
/// <inheritdoc />
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
filterContext.HttpContext.Response.Headers["X-HelloWorld"] = string.Empty;
}
}
Et cela fonctionne très bien pour toutes les demandes, sauf si elles sont interdites par [Authorize]
au niveau Controller
.
J'ai essayé d'utiliser cet attribut pour Controller
niveau et passer les noms des méthodes qui doivent ajouter cet en-tête, mais cela ne fonctionne pas aussi. Il semble que Authorize
a toujours une priorité plus élevée. Et vous pouvez convenir que c'est moche.
Comment cela peut-il être fait?
Et si vous l'enregistrez globalement? Si pas encore. – dcg
@dcg Je din't parce que j'ai besoin de seulement plusieurs méthodes sur deux contrôleurs. Il est donc plus facile d'avoir une liste blanche de contrôleurs qui doivent ajouter cet en-tête que de l'enregistrer globalement et blaclister tous sauf eux. –
Eh bien, prenez du recul et réfléchissez à ce que vous faites. Pourquoi voudriez-vous que le code de l'en-tête s'exécute quand quelqu'un n'est pas autorisé à voir quelque chose? Par définition, si vous n'êtes pas autorisé, vous ne devriez pas en tirer de fonctionnalité et cela inclura votre en-tête. Ce n'est pas que l'autorisation a une «priorité plus élevée». C'est qu'il exécute plus tôt dans le pipeline afin d'accomplir ce qui précède. – JuanR