none
Arbeiten mit Klassen und Arrays

    Frage

  • Guten Morgen zusammen,

    ich arbeite mich grade in das objektorientierte Arbeiten mit Powershell ein. In meinem Code habe ich eine Methode SetHeader() die den Parameter $apikey entgegen nimmt. Dieser Parameter wiederum soll in eine Variabel vom Typ [System.Collections.IDictionary] geschrieben werden. Ich stell mir das so vor: 

    class ops {
        [System.Collections.IDictionary]$header;
        [void]setHeader([string]$apikey) {
            $this.header = $this.header.add("Content-Type","application/json");
            $this.header = $this.header.add("Authorization","ApiKey $apikey");
        }
    ...
    }

    Die Klasse lässt sich erzeugen, aber wenn man die Methode ausführt kommt die Meldung

    Es ist nicht möglich, eine Methode für einen Ausdruck aufzurufen, der den NULL hat.
    In Zeile:1 Zeichen:1
    + $test.setHeader("Content-Type","application/json");
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
        + FullyQualifiedErrorId : InvokeMethodOnNull

    Im weiteren Verlauf dient dieser $header dann zur Authentifizierung von JSON Abfragen, lieber wärs mir auch, diesen Key, beziehungsweise diesen Array direkt als Konstruktor zu füllen. Aber alles nacheinander. Kann mir einer helfen? :-)

    Viele Grüße 


    • Bearbeitet Sebamedo Mittwoch, 10. Januar 2018 09:43 Fehler im Quote
    Mittwoch, 10. Januar 2018 09:42

Antworten

  • Probiere bitte mal, den $header wie folgt zu instanziieren:

    [System.Collections.IDictionary]$header = @{}

    und ausserdem das:

    $this.header = $this.header.add("Content-Type","application/json");
    $this.header = $this.header.add("Authorization","ApiKey $apikey");

    durch das zu ersetzen:

    $this.header.add("Content-Type","application/json")
    $this.header.add("Authorization","ApiKey $apikey")

    • Bearbeitet TobyU Mittwoch, 10. Januar 2018 11:49 extended
    • Als Antwort markiert Sebamedo Mittwoch, 10. Januar 2018 13:09
    Mittwoch, 10. Januar 2018 11:47

Alle Antworten

  • Hallo,

    Versuche mal, die Funktion so aufzurufen:

    $test.setHeader "Content-Type" "application/json"

    Powershell verwendet Leerzeichen zur Trennung von Variablen beim Aufruf von Funktionen und keine Kommas.

    Ausserdem fehlt bei der Funktion "setHeader" wohl der zweite Parameter.
    • Bearbeitet TobyU Mittwoch, 10. Januar 2018 10:39 extended
    Mittwoch, 10. Januar 2018 10:38
  • Hey,

    danke für die schnelle Antwort, aber ich glaube, die Methode hast du etwas falsch verstanden. Es wird ein Apikey entgegengenommen. Der dann überreichte Parameter soll, zusammen mit der anderen statischen Zeile in die Variabel $header eingebaut werden. Wenn man das ganze nicht grade im Rahmen einer Klasse versucht, klappt das auch und sieht dann so aus. Das einzige was halt noch im Rahmen der Methode übergeben werden muss, ist was im folgenden Beispiel als blablabla beschrieben steht :-) :


    Name                           Value                                                                                                                                                                                           
    ----                           -----                                                                                                                                                                                           
    Authorization                  ApiKey blalblalbla                                                                                                                                                                              
    Content-Type                   application/json  

     
    Mittwoch, 10. Januar 2018 10:55
  • Wie instanziierst Du die Klasse und wie rufts Du die Funktion zur Übergabe des ApiKey genau auf?
    Mittwoch, 10. Januar 2018 11:30
  • Die Klasse wird wie folgt instanziierst:

    $test = [ops]::new();

    Die Methode wird dann so aufgerufen:

    $test.setHeader("blablabla")

    Mittwoch, 10. Januar 2018 11:35
  • Probiere bitte mal, den $header wie folgt zu instanziieren:

    [System.Collections.IDictionary]$header = @{}

    und ausserdem das:

    $this.header = $this.header.add("Content-Type","application/json");
    $this.header = $this.header.add("Authorization","ApiKey $apikey");

    durch das zu ersetzen:

    $this.header.add("Content-Type","application/json")
    $this.header.add("Authorization","ApiKey $apikey")

    • Bearbeitet TobyU Mittwoch, 10. Januar 2018 11:49 extended
    • Als Antwort markiert Sebamedo Mittwoch, 10. Januar 2018 13:09
    Mittwoch, 10. Januar 2018 11:47
  • Hi,

    vielen Dank, das hat mein Problem gelöst! :-)

    Mittwoch, 10. Januar 2018 13:10
  • Freut mich zu hören :-)
    Mittwoch, 10. Januar 2018 13:15