Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 27609|Antwort: 3

[WebAPI] WebAPI kann nicht mehrere Parameter (SB und SB1) an den Inhalt der Anfrage binden

[Link kopieren]
Veröffentlicht am 16.08.2016 13:52:38 | | | |



In WebAPI kann der Anforderungskörper (HttpContent) nur einmal gelesen werden, nicht zwischengespeichert und nur weitergeleitet werden.

Zum Beispiel:

1. Anfrageadresse: /?id=123&name=bob

    Serverseitige Methode: void Action(int id, Stringname) // Alle Parameter sind einfache Typen, daher stammen sie alle aus der URL

2. Anfrageadresse: /?id=123&name=bob

    Serverseitige Methode: void Action([FromUri] int id, [FromUri] Stringname) // Wie oben

                      void Action ([FromBody]-Stringname); Das Attribut [FormBody] zeigt an, dass der gesamte Körper als Zeichenstring als Argument gelesen wird

3. Anfrageadresse: /?id=123

    Klassendefinition:

öffentliche Klasse Customer { // Ein komplexer Objekttyp definiert
  öffentlicher Stringname { get; Set; }
  öffentlich int Alter { get; Set; }
}

    Server-seitige Methode: void Action(int id, Customer c) // Parameter id wird aus der Abfrage-String gelesen, Parameter c ist eine komplexe Customer-Objektklasse, die vom Körper über Formatter gelesen wird

    Serverseitige Methode: Void Action (Kunde c1, Kunde c2) // Fehler! Mehrere Parameter sind komplexe Typen und alle versuchen, von einem Körper abzulesen, der nur einmal gelesen werden kann

    Server-seitige Methode: void action([FromUri] Customer c1, Customer c2) // Ja! Im Gegensatz zur obigen Aktion wird der komplexe Typ C1 aus der URL gelesen und C2 aus dem Hauptteil

4. ModelBinder-Methode:

void Action([ModelBinder(MyCustomBinder)] SomeType c) // Gibt an, dass ein bestimmter Modellbinder zur Auflösung des Parameters verwendet wird

[ModelBinder(MyCustomBinder)] öffentliche Klasse SomeType { } // Wenden Sie diese Regel auf alle SomeType-Typparameter an, indem Sie das [ModelBidner(MyCustomBinder)]-Attribut auf einen bestimmten Typ SomeType deklarieren

void Action(SomeType c) // Da der Typ von c SomeType ist, werden die Eigenschaften auf SomeType angewendet, um seine Modellbindung zu bestimmen



Zusammenfassung:

1. Die standardmäßigen einfachen Parameter werden durch URL-Parameter übergeben, mit Ausnahmen:

1.1 Wenn die Route den id-Parameter enthält, wird der id-Parameter durch die Route geleitet;

1.2 Wenn der Parameter als [FromBody] markiert ist, kann der Parameter ein einfacher Parameter sein, und der Client kann ihn über POST weitergeben: $.ajax(url, '=value') oder $.ajax({url: url, data: {'': 'value'}});

2. Die standardmäßigen komplexen Parameter (benutzerdefinierte Entitätsklassen) werden über POST übergeben, mit Ausnahmen:

2.1 Wenn der Parameterwert als [FromUri] markiert ist, kann der Parameter ein komplexer Parameter sein;

3. Ein Parameter mit der Markierung [FromBody] darf nur einmal erscheinen, ein Parameter mit der Markierung [FromUri] kann mehrfach erscheinen, und wenn der Parameter mit der Markierung [FromUri] ein einfacher Parameter ist, kann das Tag entfernt werden.




Vorhergehend:.NET Oracle Multi-Table Query-Methode, eine dumme Methode.
Nächster:C# verwendet Reflexion, um zu bestimmen, ob eine Eigenschaft zugewiesen ist
Veröffentlicht am 16.08.2016 15:21:29 |
ModelBinder sollte eine Feature-Klasse für ModelBinderAttribute haben.

Ähnlich wie Filter
Veröffentlicht am 16.08.2016 15:21:44 |
Komm jeden Tag vorbei
Veröffentlicht am 16.08.2016 15:22:00 |
Gib mir etwas Prestige
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com