ASP-Core-2-leer-POST-request
Habe ich einen einfachen HTTP-POST-Anforderung senden, die ich an eine ASP-Core-2-Applikation läuft in localhost mit Kestrel. Die empfangenen Daten werden immer null
es sei denn, ich benutze PostAsJsonAsync
aus einem anderen C# - app.
Den json
ich bin senden hat diese form:
{
"_isValid": true,
"_username": "test",
"_guid": "f3f574eb-5710-43c5-a4ff-0b75866a72a7",
"_dt": "2018-02-11T15:53:44.6161198Z",
"_ms": "IsSelected"
[...]
}
ASP-controller hat diese form:
//POST: api/NativeClient
[HttpPost]
public async Task<IActionResult> Post([FromBody]string value)
{
[...]
1. Fall: Versand mit PostAsJsonAsync
aus einem anderen C# - app
In einem Fall, den ich bin erfolgreich, sendet die Anforderung über eine separate C# - Anwendung, die verwendet PostAsJsonAsync
wie diese:
HttpClient client = new HttpClient();
client.BaseAddress = new System.Uri("http://localhost:51022/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await client.PostAsJsonAsync("/api/NativeClient/", json);
Den controller, der den Aufruf empfängt, und füllt value
erfolgreich.
2. Fall: Versand mit einem externen REST-client wie Postman
In einem anderen Fall versuche ich zu senden der Anforderung über einen REST-client, wie Briefträger oder Visual Studio-Code-durch REST-client-Erweiterung:
POST http://localhost:51022/api/NativeClient/HTTP/1.1
content-type: application/json; charset=utf-8
{
"_isValid": true,
"_username": "gnappo",
"_guid": "f3f574eb-5710-43c5-a4ff-0b75866a72a7",
"_dt": "2018-02-11T15:53:44.6161198Z",
"_ms": "IsSelected"
[...]
}
Hier die Anfrage durch den controller, aber die string value
ist immer null
.
Ich habe versucht, das entfernen der [FromBody]
tag, die überprüfung der Anfrage-header, die überprüfung der json-string in den Körper (das ist genau das gleiche), und andere Dinge erwähnt, die in den Referenzen unten, aber nichts funktioniert.
Was bin ich?
Anderen tests versucht/Referenzen
Wert immer null, wenn dabei die HTTP-Post-requests
Asp.net Core-2-API-POST-Objekte NULL sind?
Modell-binding JSON-Beiträge in ASP.NET Kern
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen erhalten Sie Ihre
JSON
Körper als string in IhreAPI
verwenden Sie diesen header, inHttpClient
Anfrage:erhalten Körper als string.
und wenn Sie brauchen erhalten Ihre Inhalte als Ihr Objekt, fügen Sie diesen header in Ihrer Anfrage:
und ändern Sie Ihre
API
wie diese:Senden
JSON
ObjektAPI
:PostAsJsonAsync
brauchen ein C# - Objekt zu serialisieren, dies als eineJSON
string und senden, aberPostAsync
brauchen eineJSON
string zu senden.sehen dieses Q&A httpclient-nicht-unterstützt-postasjsonasync-Methode-c-sharp
finden Sie unter diesen links für weitere info:
PostAsJsonAsync in C#
PostAsync
MediaTypeWithQualityHeaderValue("application/json")
Satz in meine eigene C# - Anwendung. Wenn ich die controller-API inPost([FromBody] YourClass classValue)
aber ich bin in der Lage zu bekommenclassValue
nur, wenn ich einPOST
Anfrage durch den Postboten; wenn ichPostAsJsonAsync
dannclassValue
Ergebnissenull
wieder. Irgendeine Idee?PostAsJsonAsync
in einePostAsync
, und meine controller-Signatur um meine Model-Klasse anstelle einesstring
. Während die beiden Ihre Antwort arbeiten, ich habe Mühe zu verstehen, warum meine ursprüngliche Lösung nicht funktioniert für beide Arten von HTTP-aufrufen. Würde Sie gerne noch näher erläutern? Vielen Dank trotzdem.Sollten Sie Deserialisieren
JSON
zu einigen Modell (Klasse), weil ich glaube, dass Sie Deserialisieren diese Zeichenfolge sowieso irgendwo im code:Und Ihre Aktion:
In Bezug auf Ihre app:
In Ihre app ein, die Sie übergeben
json
als argumentPostAsJsonAsync()
, aber Sie brauchen, um passieren Objekt und es wird analysiert, umJSON
:yourObject
ist Instanz von Klasse, die sollten analysiert werden, umJSON
.Nach Kommentar:
Versuchen Sie auch, um ändern Sie Ihre app-code zu:
YourModel value
bekommt richtig aufgefüllt, aber dann diePostAsJsonAsync
funktioniert nicht mehr: ich erhaltenull
. Eine Idee hier?JSON
?PostAsync
stattPostAsJsonAsync
gearbeitet. Zur Erinnerung, ich habe die Signatur des Controllers einschließlich derYourModel
statt einerstring
, dann vertauscht die Methode HttpClientPostAsJsonAsync(json)
inPostAsync(new StringContent(json, Encoding.UTF8, "application/json")
. Danke. Möchten Sie zu erarbeiten, warum es nicht funktioniert hat ursprünglich? Ich denke, es wäre hilfreich, an eine Erklärung in der Antwort.PostAsJsonAsync()
sollte jetzt funktionieren