2009-07-16 10 views
5

Obserwuję zachowanie naprawdę mylące z zdarzeniem Application_BeginRequest w moim pliku Global.asax (w aplikacji ASP.NET MVC). Po uruchomieniu debugera, jeśli odświeżam moją przeglądarkę (IE7), zdarzenie to zostanie wywołane dwukrotnie. Jeśli kliknę link lub ręcznie zażądam strony, uruchomi się ona raz - zgodnie z oczekiwaniami.Dlaczego Application_BeginRequest() uruchamia się dwukrotnie podczas odświeżania przeglądarki?

Dlaczego odświeżenie powoduje, że BeginRequest uruchamia się dwukrotnie?

Ja obserwując to z zupełnie nowym projektem MVC z następującymi addeded do Global.asax.cs

protected void Application_BeginRequest() { 
    //executed twice 
} 

Dla kontekście Próbuję dodać nowy obiekt do HttpContext.Current. Zbieranie przedmiotów podczas tego wydarzenia, więc będzie trwało przez cały proces żądania. Oczywiście nie chcę, aby tak się stało dwa razy w przypadku jednego odświeżonego żądania!

+0

Czy wykonujesz jakiekolwiek przekierowanie adresu URL? – cfeduke

+0

Wow; jest 2 razy za dużo? Podczas debugowania, Application_BeginRequest firest tak jak setki razy. – usefulBee

Odpowiedz

7

Czy jesteś pewien, że to naprawdę 2 żądanie dla tego samego adresu URL? Sądzę, że drugi to prawdopodobnie dynamiczny JS, CSS lub plik obrazu. Spróbuj dowiedzieć się z Fiddler lub patrząc na HttpContext.Current.Request.Uri w debugerze

+0

Bingo! Nie zdawałem sobie sprawy, że spowoduje to inne pliki treści. Wygląda na to, że drażliwość przy odświeżaniu w stosunku do innych żądań jest spowodowana tym, że IE żąda odświeżenia całej zawartości (adresu URL, css, js itp.), Podczas gdy kliknięcie linku lub ponowne wprowadzenie adresu URL powoduje zapisanie w pamięci podręcznej wszystkiego oprócz rzeczywistego adresu URL żądanie... –

0

Nie jestem pewien, dlaczego tak się dzieje, ale uważam, że łatwiej jest utworzyć klasę BaseController i wszystkie moje kontrolery dziedziczą z niej. Zmień konstruktor, aby dodać element do HttpContext.

+0

Dobry pomysł. Przyszło mi to do głowy i wydaje mi się, że teraz będzie musiało to być moje rozwiązanie. –

0

Czy w kodzie HTML znajduje się odniesienie do czegoś, co również przechodzi przez potok ASP.NET, jak dynamicznie generowany obraz lub coś w tym stylu?

2

Coś, co mnie zaskoczyło przez jakiś czas, było to, że jeśli masz tag IMG w swoim html, który nie ma właściwej ścieżki obrazu, niektóre przeglądarki zwrócą się z prośbą o oryginalną stronę. Here is a related blog post.

Powiązane problemy