Ich möchte wissen, ob es eine empfohlene Methode gibt, um festzustellen, ob eine Asp-Anwendung lokal ausgeführt wird. Im Moment verwende ich das Request-Objekt und führe eine Zeichenfolgensuche nach localhost oder 127.0.0.1 für die Servervariable durch, dies hat jedoch mehrere Einschränkungen. Das größte Problem ist, dass das Request-Objekt nicht immer verfügbar ist, wenn ich es brauche.
79
Sie können die Request.IsLocal-Eigenschaft überprüfen
quelle
Dies hat bei mir mit Application_Start funktioniert
if (!HostingEnvironment.IsDevelopmentEnvironment) { GlobalFilters.Filters.Add(new RequireHttpsAttribute()); }
Weitere Informationen zum Festlegen von IsDevelopmentEnvironment finden Sie im folgenden Thread.
Was bestimmt in ASP.NET den Wert von HostingEnvironment.IsDevelopmentEnvironment?
quelle
In einer MVC-Ansicht / ASP-Seite / Code hinter der Klasse:
bool isLocal = HttpContext.Current.Request.IsLocal;
In einem MVC-Controller:
bool isLocal = Request.IsLocal;
quelle
Request.IsLocal entspricht der Suche nach 127.0.0.1 oder :: 1. Siehe diesen Beitrag: http://forums.asp.net/p/1065813/4081335.aspx .
quelle
IsLocal
bezieht sich dies auch auf den Besuch der IIS-Site vom selben Computer aus. Dabei werden standardmäßig auch detaillierte YSOD-Fehlermeldungen angezeigt, wenn Sie vom lokalen Computer eingehen.Wenn HttpContext.Current nicht null ist, verwenden Sie
HttpContext.Current.Request.IsLocal
Andernfalls können Sie beispielsweise im App_Start oder bevor HttpContext.Current verfügbar ist, testen
HostingEnvironment.ApplicationPhysicalPath.StartsWith(@"C:\")
oder eine dedizierte Festplatte auf Ihrem PC.
Eine andere Möglichkeit ist die Verwendung einer konstanten Kompilierungsvariablen, die in der Produktion festgelegt wurde, z. B. von Azure und visualstudio.com, wenn Sie diese verwenden.
Es ist schmutzig, aber es funktioniert.
quelle
Anfrage ist in ASP.NET-Umgebung nicht immer verfügbar?
HttpContext und seine Eigenschaften Request / Response werden initialisiert, sobald der Server mit der Verarbeitung der Seite beginnt. An jedem Ort, an dem Sie C # -Code in Ihrem Seitenlebenszyklus ausführen können, sollten Sie in der Lage sein, die Anforderungs-URL zu überprüfen.
quelle
Application_Start
wird ohne HTTPContext ausgeführt.Application_Start
möglicherweise immer im Hintergrund ausgeführt. Auch die Frage hat nichts mit Seitenanfragen zu tun.Als Antwort auf den Kommentar von @Meh Men für eine andere Antwort in diesem Thread, der fragte:
Wenn Sie sicher sind, dass Ihre Produktions- und Test- oder "Homolog" -Versionen Ihrer Website alle mit einer Release-Version Ihrer Website bereitgestellt werden, während Ihre lokale Umgebung im "Debug" -Modus erstellt und entwickelt wird, können Sie
#if DEBUG
sintax to verwenden Schreiben Sie Code, der nur lokal ausgeführt werden soll, während Sie sich außerhalb dieses Blocks oder sogar innerhalb eines passenden#else
Blocks befinden. Möglicherweise schreiben Sie einen anderen Code, den Sie nur ausführen möchten, wenn er nicht lokal ausgeführt wird (z. B. remote).Hier ist ein kleines Beispiel, wie ich dieses Problem in einem bestimmten Projekt gelöst habe, an dem ich gerade arbeite:
#if DEBUG // Code here will only be run locally. #else // Code here will only be run "remotely".
quelle