lima-city: Webhosting, Domains und Cloud
0 Pluspunkte 0 Minuspunkte

Wie kann ich in meinem .NET Programm Parameter so einlesen

program.exe --api-key xxxxx --api-base http://localhost/v1

damit ich nicht alle Parameter übergeben muss?

von  

2 Antworten

0 Pluspunkte 0 Minuspunkte

Mit dem Namespace System.CommandLine geht das sehr komfortabel. Hier ein Beispiel.

using System.CommandLine;

var apiKeyOption = new Option<string?>(
    name: "--api-key",
    description: "API key (optional)"
);

var apiBaseOption = new Option<string>(
    name: "--api-base",
    getDefaultValue: () => "http://localhost/v1",
    description: "API base URL"
);

var root = new RootCommand("My tool")
{
    apiKeyOption,
    apiBaseOption
};

root.SetHandler((string? apiKey, string apiBase) =>
{
    Console.WriteLine($"apiBase={apiBase}");
    Console.WriteLine($"apiKey={(string.IsNullOrEmpty(apiKey) ? "(leer)" : "***")}");
}, apiKeyOption, apiBaseOption);

return await root.InvokeAsync(args);
von (539 Punkte)  
0 Pluspunkte 0 Minuspunkte

Du kannst die übergebenen Argumente der Reihe nach parsen (einlesen) und einfach den jeweiligen Key vergleichen. Beispiel

using System;

class Program
{
    static int Main(string[] args)
    {
        // Defaults
        string apiKey  = "";
        string apiBase = "http://localhost/v1";

        // Parse: --name value
        for (int i = 0; i < args.Length; i++)
        {
            if (args[i] == "--api-key" && i + 1 < args.Length)
                apiKey = args[++i];
            else if (args[i] == "--api-base" && i + 1 < args.Length)
                apiBase = args[++i];
            else if (args[i] == "--help" || args[i] == "-h")
            {
                PrintHelp();
                return 0;
            }
        }

        // Beispiel: apiKey ist optional
        if (string.IsNullOrWhiteSpace(apiKey))
        {
            Console.WriteLine("Hinweis: Kein --api-key übergeben (optional).");
            // wenn Pflicht: return 2;
        }

        Console.WriteLine($"apiBase={apiBase}");
        Console.WriteLine($"apiKey={(string.IsNullOrEmpty(apiKey) ? "(leer)" : "***")}");

        return 0;
    }

    static void PrintHelp()
    {
        Console.WriteLine("Usage:\n\tprogram.exe [--api-key <key>] [--api-base <url>]\n\nDefaults:\n\t--api-base http://localhost/v1");
    }
}
von (406 Punkte)  
Diese Community basiert auf dem Prinzip der Selbstregulierung. Beiträge werden von Nutzern erstellt, bewertet und verbessert – ganz ohne zentrale Moderation.

Wer hilfreiche Fragen stellt oder gute Antworten gibt, sammelt Punkte. Mit steigender Punktzahl erhalten Mitglieder automatisch mehr Rechte, zum Beispiel

  • Kommentare verfassen
  • Fragen und Antworten bewerten
  • Themen von Fragen bearbeiten
  • Fragen, Antworten und Kommentare bearbeiten
  • Inhalte ausblenden

So entsteht eine Plattform, auf der sich Qualität durchsetzt – getragen von einer engagierten Gemeinschaft.

2,536 Fragen

3,055 Antworten

281 Kommentare

13 Nutzer