Chcę wiedzieć, czy istnieje zalecany sposób określania, czy aplikacja asp działa lokalnie. W tej chwili używam obiektu Request i wyszukuję ciąg znaków dla localhost lub 127.0.0.1 w zmiennej serwera, ale ma to kilka ograniczeń. Największą z nich jest to, że obiekt Request nie zawsze jest dostępny, gdy go potrzebuję.
79
Możesz sprawdzić właściwość Request.IsLocal
źródło
To zadziałało dla mnie z Application_Start
if (!HostingEnvironment.IsDevelopmentEnvironment) { GlobalFilters.Filters.Add(new RequireHttpsAttribute()); }
Aby dowiedzieć się więcej o ustawianiu IsDevelopmentEnvironment, zapoznaj się z następującym wątkiem.
Co w ASP.NET decyduje o wartości HostingEnvironment.IsDevelopmentEnvironment?
źródło
W widoku MVC / stronie ASP / kodzie za klasą:
bool isLocal = HttpContext.Current.Request.IsLocal;
W kontrolerze MVC:
bool isLocal = Request.IsLocal;
źródło
Request.IsLocal jest tym samym, co sprawdzanie 127.0.0.1 lub :: 1. Zobacz ten post: http://forums.asp.net/p/1065813/4081335.aspx .
źródło
IsLocal
również odnosi się do odwiedzania witryny usług IIS z tego SAMEGO komputera. W ten sposób domyślnie wyświetla się również szczegółowe komunikaty o błędach YSOD, gdy przychodzą z lokalnego komputera.Jeśli HttpContext.Current nie ma wartości null, użyj
HttpContext.Current.Request.IsLocal
W przeciwnym razie, na przykład w App_Start lub przed udostępnieniem HttpContext.Current, możesz przetestować
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
lub dedykowany dysk na komputerze.
Innym sposobem może być użycie stałej zmiennej kompilacji ustawionej w środowisku produkcyjnym, na przykład z Azure i visualstudio.com, jeśli ich używasz.
Jest brudny, ale działa.
źródło
W odpowiedzi na komentarz @Meh Men's dotyczący innej odpowiedzi w tym wątku, który zapytał:
Jeśli jesteś pewien, że wszystkie wersje produkcyjne i testowe lub „homologacyjne” Twojej witryny zostaną wdrożone wraz z wydaną wersją Twojej witryny, podczas gdy Twoje środowisko lokalne będzie budowane i rozwijane w trybie „debugowania”, możesz wykorzystać
#if DEBUG
sintax do napisz kod, który powinien być uruchamiany tylko lokalnie, podczas gdy poza tym blokiem lub nawet wewnątrz pasującego#else
bloku możesz napisać inny kod, który chcesz uruchamiać tylko wtedy, gdy nie jest lokalnie (np. zdalnie).Oto mała próbka tego, jak rozwiązałem ten problem w konkretnym projekcie, nad którym aktualnie pracuję:
#if DEBUG // Code here will only be run locally. #else // Code here will only be run "remotely".
źródło
Żądanie nie zawsze jest dostępne w środowisku ASP.NET?
HttpContext i jego właściwości Request / Response są inicjowane, gdy tylko serwer rozpocznie przetwarzanie strony. Tak więc w każdym miejscu, w którym możesz wykonać kod C # w cyklu życia strony, powinieneś być w stanie sprawdzić adres URL żądania.
źródło
Application_Start
jest wykonywany bez HTTPContext.Application_Start
mogą zawsze działać w tle. Również pytanie nie ma nic wspólnego z żądaniami stron.