2017-05-22 5 views
0

Ich bin neugierig auf Optionen zum Übergeben von Argumenten an eine MVC-App (Web App, Rest Service usw.). Es scheint für diese keine Unterstützung zu sein von dem, was ich aber finden ...ASP.NET-Befehlszeilenargumente

Wenn ich Application_Start Methode einer App ändern (in Globals.asax.cs) und eine Erklärung wie folgt hinzu:

Environment.GetCommandLineArgs() 

dann führe das unter dem Visual Studio Debugger aus, ich kann sehen, dass vier Argumente übergeben werden.

Diese sind:

Ein Pfad zum iisexpress.exe Datei.

ein Pfad zu einem applicationhost.config

A "/ site" arg.

Ein "/ apppool" arg.

Dies deutet darauf hin, dass es tatsächlich eine Möglichkeit gibt, Argumente zu übergeben, aber niemand spricht darüber und es ist nicht dokumentiert. Ich möchte hier ein weiteres benutzerdefiniertes Argument hinzufügen, auf das unser eigener Code zurückgreifen kann, wenn er vorhanden ist.

+1

Wahrscheinlich sind diese Befehlszeilenargumente für den IISExpress nicht für Ihre Anwendung – Steve

Antwort

0

Eine ASP.NET-Website ist keine Windows-Anwendung. Es hat zum Beispiel keine .exe. Stattdessen enthält eine ASP.NET-Website eine Reihe von Klassen, die einer bestimmten Schnittstelle entsprechen, die als Plugins in den IIS-Prozess übernommen werden, insbesondere eine Global.asax, die von HttpApplication erbt. Wenn eine HTTP-Anfrage eingeht, instanziiert IIS die HttpApplication und geht von dort; Das ist nicht so, als würde man ein Programm von der Kommandozeile ausführen.

Wenn Sie versuchen, Bits über den Anwendungsprozess (z. B. Befehlszeilenargumente) über die verschiedenen APIs zu lernen, erhalten Sie wahrscheinlich Informationen nicht über Ihre Website, sondern über den IIS-Dienstprozess als Ganzes.

Es ist nicht möglich, benutzerdefinierte Befehlszeilenargumente für eine ASP.NET-Website bereitzustellen. Ich würde vorschlagen, dass Sie stattdessen die Verwendung von Environment variables, Registrierungseinträgen oder web.config-Elementen prüfen.

+0

Ja, ich kann dies sehen, aber möchte eine einfache Möglichkeit, dies an eine App (außerhalb einer Konfigurationsdatei) und in einer Debugsitzung etc. zu übergeben wäre sehr schön gewesen, wenn Microsoft ASP.NET so entworfen hätte, dass Befehlszeilenargumente bereitgestellt werden könnten (in Debug- und IIS-Konfiguration). – Hugh

+0

Wenn Sie mir sagen können, warum eine Konfigurationsdatei für Ihre Zwecke nicht geeignet ist, kann ich Ihnen möglicherweise weitere Hinweise geben. Befehlszeilenparameter würden ein seltsames Paradigma für eine ASP.NET-Anwendung sein, da sie die ganze Zeit ohne Benutzereingriff starten und sich selbst recyceln. –

+0

Wir verwenden ein stark erweitertes Konfigurationssystem mit mehreren benutzerdefinierten Abschnitten (durch Zufall ist es ähnlich, was jetzt in .Net-Kern ist). Unsere Konfigurationsdatei enthält einen einzelnen Abschnitt , in dem mehrere Abschnitte mit jeweils einem Attribut 'zone' enthalten sind. Diese Zeichenfolge benennt die Umgebung ('production', 'development' usw.). Innerhalb jeder sind die App-Einstellungen und Verbindungszeichenfolgen. Es gibt auch einen anderen Abschnitt zugeordnet zu einer lokalen Datei - das definiert die Zone usw. Ich möchte dies vermeiden und irgendwie die Zone in. – Hugh

0

Ich möchte @ Steve Kommentar oben einfach erweitern.

Eine typische ASP.NET-Webanwendung wird immer von einem Prozess gehostet. Das gibt Environment.GetCommandLineArgs eine Möglichkeit, Ihnen einige Werte zurückzugeben, wie Sie entdeckt haben. Es wäre jedoch schwierig, Informationen über diese zu übertragen, da Sie in vielen Fällen keine sinnvolle Möglichkeit haben, die gewünschten Werte zu übergeben.

IIS Express in Visual Studio

Wenn Sie ein Projekt in VS debuggen, es läuft in der Regel auf IIS Express, und VS Sie nicht einen Platz zu konfigurieren bereitzustellen, die Parameter übergeben. (ASP.NET-Core-Projekte könnten unterschiedlich sein.)

IIS unter Windows Server

Wenn Ihre App schließlich zu einem Produktionsserver setzt es auf IIS ausgeführt wird. IIS-Arbeitsprozesse (w3wp.exe) werden vollständig vom Windows-Prozessaktivierungsdienst verwaltet. Sie können also nicht festlegen, welche Parameter übergeben werden sollen.

Selbst Hosting

einige Projekttypen (ASP.NET Web API/SignalR/WCF) können Sie selbst Hosting in einer Konsole Prozess zu tun. Sie können in diesem Fall Befehlszeilenparameter verarbeiten.

Insgesamt sind Befehlszeilenparameter jedoch nicht Teil des Entwurfs von Microsoft zur Weitergabe von Informationen an ASP.NET-Apps. Geh nicht zu weit auf diesem Weg.