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 administrador no están disponibles para nativo IHttpModules o IHttpHandlers .

Versión del producto original:   Servicios de Internet Information Server
Número de KB original:   2666571

Síntomas

Cuando se usa la Cookies colección desde los HttpRequest objetos o administrados HttpResponse para agregar una cookie, ésta no se muestra en el IHttpRequest objeto nativo.

Causa

La Cookies colección de los objetos administrados HttpRequest y HttpResponse objetos no tienen una colección correspondiente en el IHttpRequest IHttpResponse objeto u de Internet Information Services (IIS). Por lo tanto, agregar o modificar cualquiera de estas colecciones no modifica el Cookie encabezado en el IHttpRequest objeto.

Solución

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

Más información

En el ejemplo siguiente se indica que HttpModule el código administrado agregará la cookie a los 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));
        }
    }
}