Global.asax Обработка ошибок: особенности server.transfer

В моем global.asax я проверяю 404 и перехожу на страницу с ошибкой 404, как показано ниже:

    If HTTPExceptionInstance.GetHttpCode = 404 Then

        Server.ClearError()

        Response.TrySkipIisCustomErrors = True
        Response.Status = "404 Not Found"

        Server.Transfer("~/Invalid-Page.aspx")

    End If

Проблема в том, что мой Invalid-page.aspx использует некоторый код сеанса (Session ("somevariable")), который выдает исключение "Состояние сеанса можно использовать, только если для параметра enableSessionState установлено значение true , либо в файле конфигурации, либо в директиве Page ». потому что я использую server.transfer (я считаю, что это известная проблема?).

Если я использую Response.Redirect, проблем нет. Однако это будет означать, что заголовок страницы с ошибкой - 200, а не 404.

Что было бы лучшим решением для этого?


person Donnie Thomas    schedule 01.09.2010    source источник


Ответы (2)


Странный! Server.TransferRequest делает именно то, что я хочу, без потери состояния сеанса!

person Community    schedule 02.09.2010
comment
Спасибо! Это беспокоило меня часами. Семантика TransferRequest отличается от Transfer (например, он, по-видимому, создает новый HttpContext, поэтому любые Items в текущем контексте теряются), но это хороший способ решения проблемы с потерянным сеансом. - person Jakub Januszkiewicz; 28.05.2013

Проверьте, установлено ли для EnableSessionState значение true в директиве страницы Invalid.aspx

person Vinay B R    schedule 01.09.2010
comment
Я добавил его, но это не имело значения. Насколько я понимаю, проблема, похоже, вызвана server.transfer, который, похоже, убивает сеанс ... - person Donnie Thomas; 02.09.2010