Если у Вас есть compizconfig менеджер по настройкам (ccsm) существует плагин, названный 'масштабом', который он покажет Вам всем, окна открываются на текущей рабочей области.
открытый класс PageTools
Отмечено, это будет выглядеть как открытый класс PageTools: IRequiresSessionState
или с обоими интерфейсами, открытый класс PageTools: IRequiresSessionState, IHttpHandler
. В моем случае мой класс нужно было только отметить первым. Моему обработчику нужны и то, и другое. реализовать
из меню (Visual Studio), и необходимые методы будут добавлены в ваш класс. Или вы можете найти их и добавить вручную. Когда у вас есть маркер IRequiresSessionState, вы можете проверить, является ли состояние сеанса только для чтения, и, если да, установить новый обработчик http.
if (context.Handler is IReadOnlySessionState
|| context.Handler - это IRequiresSessionState)
{
context.Handler = Обработчик ();
}
Обработчик http: MSDN многое расскажет о HttpHandlers и HttpModules. В моем случае мне нужен фиктивный обработчик, чтобы я мог получить доступ к состоянию сеанса, когда он обычно был доступен только для чтения ( Page_PreInit
). Итак, в своем классе я добавил следующее:
protected IHttpHandler Handler ()
{
MyHttpHandler resourceHttpHandler = HttpContext.Current.Handler
как MyHttpHandler;
if (resourceHttpHandler! = null) // вернуть исходный обработчик
{
вернуть resourceHttpHandler.OriginalHandler;
}
// в этот момент состояние сеанса должно быть доступно
вернуть HttpContext.Current.Handler;
}
открытый класс MyHttpHandler: IHttpHandler, IRequiresSessionState
{
только для внутреннего чтения IHttpHandler OriginalHandler;
общедоступный MyHttpHandler (IHttpHandler originalHandler)
{
OriginalHandler = originalHandler;
}
public void ProcessRequest (контекст HttpContext)
{
// не волнуйтесь, ProcessRequest () не будет вызван,
// но будем осторожны
выбросить новое исключение InvalidOperationException (
«MyHttpHandler не может обрабатывать запросы.»);
}
public bool IsReusable
{
// IsReusable должен иметь значение false, поскольку у класса есть член!
получить {вернуть ложь; }
}
}
Здесь - ссылка на очень элегантный класс HttpModule, от которого я многое получил или использовал. Я надеюсь, что это помогает кому-то.
Вам нужно просто унаследовать свой класс HTTP Handler от IRequiresSessionState , чтобы получить доступ к SessionState.
public class MyHttpHandler : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
var MyValue = context.Session["MyKey"] as String;
MyValue = "Hello World";
context.Session["MyKey"] = MyValue;
}
public bool IsReusable
{
get { return true; }
}
}
Интерфейс IRequiresSessionState
является интерфейсом маркера и не содержит методов, поэтому вы не можете использовать его так, как задаете вопрос. Вы реализуете интерфейс в обработчике HTTP только для того, чтобы определить, что обработчику требуется доступ для чтения и записи к значениям состояния сеанса.
Чтобы увидеть, как вы реализуете его в обработчике HTTP, просмотрите эту ссылку: http: / /www.willasrari.com/blog/irequiressessionstate-and-dynamic-data-in-static-pages/000262.aspx