J'ai ce module:Lorsque les en-têtes HTTP sont déjà envoyés?
public class SecureCookieModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.EndRequest += OnEndRequestHandlerExecute;
}
private void OnEndRequestHandlerExecute(object sender, EventArgs e)
{
if (!AppConfig.MachineAppSettingsBool("setSecureCookiesForSecureConnections"))
{
return;
}
try
{
HttpApplication app = sender as HttpApplication;
if (app.Request.IsReallySecureConnection())
{
foreach (string s in app.Response.Cookies.AllKeys)
{
var cookie = app.Response.Cookies[s];
if (cookie.Secure == false)
{
cookie.Secure = true;
app.Response.Cookies.Add(cookie);
}
}
}
}
catch (Exception ex)
{
LogManager.GetLogger("SecureCookieModule").Error("Exception while processing http module. Ex: {0}", ex);
}
}
}
De ce que j'ai écrit dans certains cas, les en-têtes de réponse sont déjà envoyés, de sorte qu'ils ne peuvent pas être modifiés et exception est levée à cause de cela. Ce qui me manque, c'est dans quels cas cela arrive et pourquoi? Pourquoi dans certains cas avant d'exécuter l'événement "OnEndRequestHandlerExecute" ils sont envoyés et dans d'autres cas ils ne le sont pas? Quelle est la règle derrière ces cas résultant de ce comportement?
Merci d'avance!
Si le gestionnaire de requêtes écrit dans le flux de sortie, vous ne pouvez pas être la définition de cookies, car ceux-ci vont dans le *** tête *** ers qui vont à la tête *** ** * du flux Faire cela ** après que ** le gestionnaire de requêtes a été déclenché est voué à l'échec. Je suis surpris que cela fonctionne du tout. – spender
Ainsi, lorsque le gestionnaire écrit directement dans la réponse, tous les en-têtes sont envoyés. Je l'ai vérifié et c'est ainsi que ça fonctionne. Merci. –