2012-05-15 8 views
6

Wewnątrz Application_Start mojego Global.asax.cs, Próbuję uzyskać bieżącą ścieżkę aplikacji przy użyciu:Uzyskaj bieżącej aplikacji Virtual Path w ASP.Net

var virtualPath = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority) 
          + HttpRuntime.AppDomainAppVirtualPath; 

będzie to powrót na przykład: http://localhost:99/MySite/

i wtedy użyć tego adresu URL i wykonaj następujące czynności:

var pageToHit = virtualPath + Pages\MyOtherPage.aspx 
var client = new WebClient(); 
client.DownloadData(dummyPageUrl); 

Wszystko to jest w porządku, kiedy uruchomić projekt w IIS 6 lub Visual Studio wbudowany serwer WWW, jednak w programach IIS 7 szaleją rzeczy, ponieważ dostaję "System.Web.HttpException: Żądanie nie jest dostępne w tym kontekście".

Zdaję sobie sprawę z tego wątku: Request is not available in this context

Jednak, zastanawiałem się, czy ktoś ma jakiś pomysł, jak to zrobić bez zmiany powyższego projektu do uruchomienia w trybie klasycznym.

+0

Wydaje się, że jest to duplikat pytania Jak uzyskać pełną nazwę hosta + numer portu w polu Application_Start of Global.aspx? pytanie: http://stackoverflow.com/questions/4243270/how-to-get-full-host-name-port-number-in-application-start-of-global-aspx – JamieSee

Odpowiedz

5

Nie można uzyskać dostępu do bezwzględnego adresu URL bieżącego żądania w aplikacji Application_Start podczas pracy w trybie zintegrowanym. Dostęp do ścieżki wirtualnej można uzyskać przy użyciu adresu HostingEnvironment.ApplicationVirtualPath, ale nie bezwzględnego adresu URL. Oto an article, który wyjaśnia typowe obejście tego problemu. Jak wyjaśniono w artykule masz 2 możliwości:

  1. zmienić kod aplikacji, aby nie używać kontekst żądanie (zalecane)
  2. Przeprowadź inicjalizację w Application_BeginRequest za pomocą zamka i singleton, aby zapewnić, że ta inicjalizacji jest wykonywana tylko raz przez cały czas trwania AppDomain. Oto similar thread omawiające to drugie podejście.
+0

ok czy jest sposób na serwowanie strona ręcznie? na przykład var client = new WebClient(); client.DownloadData (Pages \ DummyPage.aspx) – MaYaN

+0

Nie, metoda WebClient wymaga bezwzględnego adresu URL. –

+0

Rozumiem. teraz problem w Application_BeginRequest jest taki, że po uruchomieniu aplikacji zdarzenie _BeginRequest nie jest uruchamiane, dopóki użytkownik nie znajdzie się na żadnej ze stron. To jest problem, ponieważ muszę nacisnąć stronę zaraz po uruchomieniu aplikacji. – MaYaN

Powiązane problemy