2011-10-25 1 views
0

J'essaye de placer un en-tête Http sur chaque demande de page d'un site Web. Pour ce faire, le code pour ajouter l'en-tête (Response.AppendHeader ("p3p", "{HeaderInfoHere}")) est placé dans le remplacement OnActionExecuted du contrôleur de base (il est donc appelé chaque fois qu'une action est appelée). Le problème est que, vu que l'en-tête est ajouté à chaque fois qu'une action est appelée (tous les autres contrôleurs héritent du contrôleur de base), l'en-tête est ajouté à plusieurs reprises en fonction du nombre d'actions (vues partielles etc.) sont appelés dans le cadre de la demande initiale.Http Headers défini dans le contrôleur de base?

Je ne peux pas interroger la collection Headers de l'objet Response - nous obtenons une exception PlatformNotSupported car le mode de pipeline intégré IIS est désactivé sur notre serveur (quelque chose que je ne peux pas modifier), donc je ne peux pas vérifier directement si déjà été ajouté.

Quelqu'un peut-il suggérer un meilleur moyen d'ajouter un en-tête (une fois) à une demande GET dans MVC ou un travail autour de ce scénario?

+0

Créer un HttpModule? –

+0

Je ne pense pas que vous pouvez ajouter un en-tête dans un module pas en mode intégré. Je pense. Ma mémoire est floue :) –

+0

Je peux les ajouter OK il semble - juste ne pas lire la collection Headers dans le code: S –

Répondre

0

Ajoutez des données à votre ControllerContext (éventuellement dans RouteData) en notant votre code "J'ai déjà ajouté cet en-tête" que vous vérifiez avant de l'ajouter. Vous pouvez également essayer d'utiliser la session (et avant que quiconque n'étrangle - TempData utilise déjà)

La session est accessible via controllerContext.HttpContext.Session

Questions connexes