Las cookies agregadas por un HttpModule administrado no están disponibles para IHttpModules o IHttpHandlers nativos

Este artículo le ayuda a resolver el problema en el que las cookies agregadas por un administrado no están disponibles para IHttpModules nativos o IHttpHandlers .

Versión del producto original:   Internet Information Services
Número KB original:   2666571

Síntomas

Cuando se usa la colección de objetos o administrados para agregar una cookie, la cookie no aparece Cookies HttpRequest en el objeto HttpResponse IHttpRequest nativo.

Causa

La colección de los objetos administrados y no tiene una colección correspondiente en Cookies el objeto or en Internet Information Services HttpRequest HttpResponse IHttpRequest IHttpResponse (IIS). Por lo tanto, la adición o modificación de cualquiera de estas colecciones no modifica el Cookie encabezado del IHttpRequest objeto.

Solución

Para modificar una cookie específica en el encabezado del objeto nativo desde código administrado, modifique el encabezado directamente en la colección del objeto administrado, en lugar de a través Cookie IHttpRequest de la Cookie HttpRequest Header Cookies colección.

Más información

En el ejemplo siguiente se indica que el código administrado agregaría la cookie a los HttpModule encabezados del IHttpRequest objeto de la canalización de IIS.

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;

namespace AddCookieModule
{
    public class AddCookieClass : IHttpModule
    {
        private void Application_BeginRequest(Object source EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            HttpCookie testCookie = new HttpCookie("testCookie",
            DateTime.Now.ToString());
            testCookie.Expires = DateTime.Now.AddYears(5);
            context.Request.Headers.Add("Cookie",
                                        "testCookie=" + testCookie.Value);
            context.Response.Cookies.Add(testCookie);
        }

        public void Dispose()
        {
            // nothing to do.
        }

        public void Init(HttpApplication context)
        {
            context.BeginRequest +=
                (new EventHandler(this.Application_BeginRequest));
        }
    }
}