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));
}
}
}