2016-03-10 8 views
0

Я использую Azure провайдер состояния сеанса связи (DistributedCacheSessionStateStoreProvider), и он отлично работает. Но теперь у меня есть пользовательский HttpModule, который сочетает в себе скрипты. Я подключаю Response.Filter в PostAcquireRequestState. Я затем отправить Session ссылку на мой пользовательский фильтр с помощью конструктора:Сеанс доступа в HttpModule в ответ или после ответа. Фильтр?

application.Response.Filter = new CombinationFilter(application.Response.Filter, application, application.Session) 

изменить Session в моем фильтре, и он отлично работает на локальном хосте (стандарт поставщика сеанса). Но опубликовано на Azure, когда я изменяю Session значения, но позже они исчезают (они не сохраняются). Только те, которые добавлены в фильтр, исчезают, те, что были там раньше, все еще там. Я подозреваю, что последняя синхронизация находится в пределах ReleaseRequestState (на основе имени). Это, очевидно, до обработки моего Response.Filter.

  1. Как я могу получить Session позже в цепочке и сохранить его?

  2. Или можно каким-либо образом использовать фильтр до ReleaseRequestState?

ответ

0

Я, наконец, решил это. Для других людей, которые могут задаться вопросом, как этого достичь:

application.PostRequestHandlerExecute += (sender, args) => 
{ 
    if (YourCondition) 
    { 
     // performs premature flush to force the filter 
     application.Response.Flush(); 
     String content = ((CombinationFilter) application.Response.Filter).OriginalContent; 

     // we need to remove the filter to not execute twice 
     application.Response.Filter = null; 

     // do my stuff here, we still have a Session and also the original content 
     // the content is stored on a filter in Flush() method before modification 
     // (by me => my custom property) 

     // do not write any other content 
     application.Response.SuppressContent = true; 

     // onwards it still saves Session in ReleaseRequestState (presumably) 
    } 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^