Почему HttpContext.Session null, когда redirectMode = ResponseRewrite

Как предлагается в другом месте, я использую redirectMode = ResponseRewrite в моей настраиваемой конфигурации ошибок, поэтому моя страница пользовательских ошибок может получить доступ к информации об исключении. Это сработало как прелесть в течение некоторого времени.

При добавлении некоторой дополнительной функции "помочь пользователю восстановить из ошибки" нам нужна часть информации, которая ранее была сохранена в сеансе. При реализации этого я обнаружил, что различные возможности сеанса заканчиваются в null, когда redirectMode = ResponseRewrite, но все они заполняются, когда redirectMode = ResponseRedirect (или не определен).

Кто-нибудь знает почему? Кажется странным, что нам придется выбирать между информацией об исключении (ResponseRewrite) или сеансом (ResponseRedirect).

статья MSDN об обработке Rich Custom Error говорит мне, что сеанс доступен только в том случае, когда метод управления передачей является Server.Transfer, который что я предположил, что ResponseRewrite используется под капотом. Очевидно, это не так.

Ответ 1

Я еще не знаю ответа на вопрос, но, чтобы пройти мимо него, я взял атрибут redirectMode из своей веб-конфигурации и поместил пользовательскую логику в обработчик Global.asax Application_Error, чтобы делать то, что я хотел. Я заменяю исключение на исключение "удобного для пользователя" сообщения, но по существу логика передачи:

if(Context.IsCustomErrorEnabled)
{
Server.Transfer("~/Error.aspx");
}

Затем на странице Error.aspx есть код Page_Load, чтобы вывести ошибку из контекста и отобразить сообщение.