Ich habe seit einigen Wochen an ASP.NET Core gearbeitet. Ich habe versucht, etwas basierend auf diesem Blog zu erreichen: Microservices
Mein project.json
ist wie folgt:
Und ConfigureServices
Methode in Startup.cs
ist wie folgt:
Und hier ist meine Confiure
Methode in Startup.cs:
Ein AuthorizationController ist wie folgt:
%Vor% Die Methode Post
hatte ursprünglich [FromBody]string[] value
. Ich habe es weiter vereinfacht, indem ich es zu einem einfachen string
Typ gemacht habe. Ich verwende den Advance Rest Client in Chrome, um eine HTTP request
zu senden. Wenn string[]
der Typ I war, waren die folgenden Werte in body:
Nachdem ich den Parameter vereinfacht habe, habe ich versucht, eine Anfrage mit folgendem Text zu senden:
%Vor%hat das auch versucht:
%Vor%Vermisse ich etwas? Ich habe vorher gelesen, wie alte WebApi in Bezug auf die JSON-Zuordnung zu den komplexen Objekten und normalen Parametern funktioniert, funktioniert in .NET Core ähnlich.
Ich sollte auch ausführen, dass Haltepunkt normalerweise auf allen Middlewares und Controllern getroffen wird. Aber keine der Middleware scheint in der Lage zu sein, die Stream-bezogenen Dinge von Request zu lesen:
Bitte sag mir, wo ich Probleme mache. Vielen Dank!
[FromBody]
verwendet die registrierten Formatierer, um den gesamten Text der übermittelten Daten in den einzelnen Parameter zu decodieren, auf den sie angewendet wird. Standardmäßig akzeptiert der einzige registrierte Formatierer JSON.
In JSON gibt es keine gültige Möglichkeit, einen String direkt darzustellen - {"sdjklgsdjlg"}
ist nicht gültig JSON, {"value":"sdjklgsdjlg"}
ist, wird aber nicht zu einem einfachen String-Parameter deserialisiert. BEARBEITEN: Siehe die Antwort von @tmg, dies kann mit der Syntax { "": "sdjklgsdjlg" }
Daher benötigen Sie eine bestimmte Modellklasse, um die Eingabe zu repräsentieren, die Sie vom Haupttext erhalten möchten, z. B .:
%Vor%Dann sollten Sie erfolgreich tun können:
%Vor% Wenn Sie nun { "Value": "some value" }
veröffentlichen, sollte es das tun, was Sie erwarten.
Sie können auch so etwas tun:
%Vor% oder Benutzer [FromQuery]
und übergeben Sie direkt einen Querystring-Wert.
Ich bin zu spät hier, aber ich möchte den genauen Grund teilen, damit jeder andere Benutzer genaue Informationen erhalten kann.
Sie können keine Werte auf dem Controller abrufen, da Sie Daten als JSON-Objekt veröffentlichen:
%Vor%Um dies zu lösen, benötigen wir ein anderes Objekt, um diese Daten zu binden. So etwas bei der Aktion des Controllers:
%Vor%hier CustomViewModel ist eine Klasse:
%Vor%Wenn Sie Daten gemäß Ihrer aktuellen Aktionssignatur erhalten möchten:
%Vor%Dann müssen Sie Daten als JSON-Zeichenfolge im Anfragetext übergeben:
%Vor%Ähnlich für die String-Array-Aktion:
%Vor%Übergeben Sie ein JSON-Array mit einer Zeichenfolge im Anfragetext:
%Vor% Sie sollten die RC2-Version all Ihrer Abhängigkeiten verwenden.
Es gibt Ссылка Ich habe festgestellt, dass die Version von System.Threading.Tasks.Extensions 4.0.0 ist Standard. Daher sollten Sie die Version dieses Pakets explizit in der Datei project.json angeben:
Tags und Links c# asp.net-core asp.net-core-mvc asp.net-core-1.0