У меня есть некоторый проверочный концептуальный код для модуля HTTP.Код проверяет, существует ли cookie, если это так, он извлекает значение, если cookie не существует, он создает его и задает значение.
После того, как это сделано, я пишу на экран, чтобы увидеть, какое действиебыл взят (все красиво и просто).Итак, по первому запросу создается cookie;последующие запросы извлекают значение из cookie.
Когда я проверяю это на обычном веб-сайте asp.net, все работает правильно - ура!Однако, как только я передаю его в SharePoint, происходит что-то странное, cookie никогда не сохраняется, то есть код всегда переходит к созданию cookie и никогда не использует ветвь для получения значения - независимо от обновления страницы или вторичных запросов.
Вот код ...
public class SwithcMasterPage : IHttpModule
{
public void Dispose()
{
throw new NotImplementedException();
}
public void Init(HttpApplication context)
{
// register handler
context.PreRequestHandlerExecute += new EventHandler(PreRequestHandlerExecute);
}
void PreRequestHandlerExecute(object sender, EventArgs e)
{
string outputText = string.Empty;
HttpCookie cookie = null;
string cookieName = "MPSetting";
cookie = HttpContext.Current.Request.Cookies[cookieName];
if (cookie == null)
{
// cookie doesn't exist, create
HttpCookie ck = new HttpCookie(cookieName);
ck.Value = GetCorrectMasterPage();
ck.Expires = DateTime.Now.AddMinutes(5);
HttpContext.Current.Response.Cookies.Add(ck);
outputText = "storing master page setting in cookie.";
}
else
{
// get the master page from cookie
outputText = "retrieving master page setting from cookie.";
}
HttpContext.Current.Response.Write(outputText + "<br/>");
}
private string GetCorrectMasterPage()
{
// logic goes here to get the correct master page
return "/_catalogs/masterpage/BlackBand.master";
}