Von einem verwalteten HttpModule hinzugefügte Cookies sind für systemeigene IHttpModules oder IHttpHandlers nicht verfügbar.
Dieser Artikel hilft Ihnen, das Problem zu beheben, bei dem Cookies, die von einem verwalteten Objekt hinzugefügt werden, für systemeigene IHttpModules oder IHttpHandlers .
Ursprüngliche Produktversion: Internetinformationsdienste
Ursprüngliche KB-Nummer: 2666571
Problembeschreibung
Wenn Sie die Cookies Auflistung aus den verwalteten Objekten oder HttpRequest Objekten zum Hinzufügen eines Cookies HttpResponse verwenden, wird das Cookie nicht im systemeigenen IHttpRequest Objekt angezeigt.
Ursache
Die Cookies Auflistung in den verwalteten Objekten und die Objekte verfügen nicht über eine entsprechende Auflistung in der oder dem Objekt in Internetinformationsdienste HttpRequest HttpResponse IHttpRequest IHttpResponse (IIS). Das Hinzufügen oder Ändern einer dieser Auflistungen ändert also nicht die Cookie Kopfzeile im IHttpRequest Objekt.
Lösung
Um ein bestimmtes Cookie in der Cookie Kopfzeile des nativen Objekts aus verwaltetem Code zu IHttpRequest ändern, ändern Sie den Cookie Header direkt in der Auflistung des verwalteten HttpRequest Header Objekts, anstatt über die Cookies Auflistung.
Weitere Informationen
Das folgende Beispiel bedeutet, dass verwalteter HttpModule Code das Cookie den Headern im Objekt in der IHttpRequest IIS-Pipeline hinzufügen würde.
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));
}
}
}