10

Zgodnie z sugestią elsewhere, używam redirectMode = ResponseRewrite w mojej konfiguracji błędów niestandardowych, więc moja strona błędów niestandardowych może uzyskać dostęp do informacji o wyjątku. To działało jak jakiś urok przez jakiś czas.Dlaczego HttpContext.Session null, gdy redirectMode = ResponseRewrite

Dodając więcej funkcji "pomóż użytkownikowi odzyskać dane po błędzie", potrzebujemy informacji, które zostały wcześniej zapisane w sesji. Wdrażając to, stwierdziłem, że różne ścieżki do Session kończą się wartością null, gdy redirectMode = ResponseRewrite, ale są one zapełniane, gdy redirectMode = ResponseRedirect (lub nie jest zdefiniowany).

Ktoś wie dlaczego? Wydaje się dziwne, że musielibyśmy wybrać między informacjami o wyjątku (ResponseRewrite) lub sesjami (ResponseRedirect).

Obsługa niestandardowego błędu niestandardowego MSDN article informuje mnie, że sesja jest dostępna tylko wtedy, gdy metodą przekazywania kontroli jest Server.Transfer, co jest tym, co zakładałem, że ResponseRewrite jest używane pod maską. Najwyraźniej tak nie jest.

+0

+1 Mam dokładnie ten sam problem –

+1

Mauricio, nie znam jeszcze odpowiedzi na pytanie, ale aby ominąć to, wziąłem atrybut redirectMode z mojej konfiguracji sieci i umieściłem niestandardową logikę w Global.asax Application_Error handler do zrobienia tego, co chciałem. Zastępuję wyjątek wyjątkiem "przyjazny dla użytkownika", ale zasadniczo logika przesyłania to: if (Context.IsCustomErrorEnabled) { Server.Transfer ("~/Error.aspx"); } } Następnie strona Error.aspx zawiera kod Page_Load, aby usunąć błąd z kontekstu i wyświetlić komunikat. – Josh

+0

@Josh, który wygląda dobrze, umieść go w odpowiedzi, więc mogę go poprawnie przegłosować :-) –

Odpowiedz

5

Nie znam jeszcze odpowiedzi na pytanie, ale aby ominąć to, wziąłem atrybut redirectMode z mojej konfiguracji sieci i wstawiłem niestandardową logikę do obsługi Global.asax Application_Error, aby zrobić to, co chciałem. Ja zastępując wyjątek z „przyjaznym dla użytkownika” wyjątkiem wiadomości, ale w istocie logika transferu jest:

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

Następnie strona Error.aspx został kod Page_Load pociągnąć za błąd z kontekstu i wyświetli komunikat .

Powiązane problemy