ASP.NET Core-API-POST-parameter ist immer null
Habe ich Folgendes gelesen:
- Asp.net Core-Post-parameter ist immer null
- asp.net webapi 2 post-parameter ist immer null
- web-api-POST-body-Objekt immer null
- Web-Api-Parameter immer den Wert null
Meine Endpunkt:
[HttpPost]
[Route("/getter/validatecookie")]
public async Task<IActionResult> GetRankings([FromBody] string cookie)
{
int world = 5;
ApiGetter getter = new ApiGetter(_config, cookie);
if (!await IsValidCookie(getter, world))
{
return BadRequest("Invalid CotG Session");
}
HttpContext.Session.SetString("cotgCookie", cookie);
return Ok();
}
Meine Anfrage:
$http.post(ENDPOINTS["Validate Cookie"], cookie , {'Content-Type': 'application/json'});
Wo cookie
ist, der einen string sende ich aus der Benutzereingabe.
Antrag Beiträge zu den endpoint mit den entsprechenden Daten. Aber mein string ist immer den Wert null. Ich habe versucht, das entfernen der [FromBody]
- tag, sowie das hinzufügen einer =
vor der eingestellten Daten nicht mit Glück. Ich habe auch versucht, hinzufügen und entfernen von verschiedenen Arten von Inhalten, die mit allen Kombinationen der oben genannten.
Der Grund warum ich bin das tun diese spezifische Aktion ist lang und spielt keine Rolle für diese Frage.
Warum ist mein parameter immer null, egal, was ich scheine zu tun?
Edit: ich habe auch versucht, mit Hilfe {cookie: cookie}
Edit2: Antrag:
Request URL:http://localhost:54093/getter/validatecookie
Request Method:POST
Status Code:400 Bad Request
Remote Address:[::1]:54093
Antwort-Header
Content-Type:text/plain; charset=utf-8
Date:Mon, 23 Jan 2017 03:12:54 GMT
Server:Kestrel
Transfer-Encoding:chunked
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcVXNlcnNcRG91Z2xhc2cxNGJcRG9jdW1lbnRzXFByb2dyYW1taW5nXENvdEdcQ290RyBBcHBcc3JjXENvdEdcZ2V0dGVyXHZhbGlkYXRlY29va2ll?=
Request-Header
POST /getter/validatecookie HTTP/1.1
Host: localhost:54093
Connection: keep-alive
Content-Length: 221
Accept: application/json, text/plain, */*
Origin: http://localhost:54093
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://localhost:54093/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8
Anfrage-Payload
=sec_session_id=[redacted]; _ga=[redacted]; AWSELB=[redacted]
InformationsquelleAutor der Frage Douglas Gaskell | 2017-01-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass die
Content-Type
istapplication/json
in der Erwägung, dass die request-payload ist eigentlichtext/plain
. Das wird Ursache ein 415 Unsupported Media Type-HTTP-Fehler.Haben Sie mindestens zwei Möglichkeiten zu richten, dann
Content-Type
und den eigentlichen Inhalt.Application/json
Halten die
Content-Type
alsapplication/json
und stellen Sie sicher, dass der request-payload ist gültiges JSON. Zum Beispiel, stellen Sie Ihre Anfrage-payload:Dann die Aktion Signatur muss akzeptieren, dass ein Objekt mit der gleichen Form wie das JSON-Objekt.
Statt der
CookieWrapper
Klasse, oder Sie können dynamische oder eineDictionary<string, string>
und wiecookie["cookie"]
im EndpunktVerwenden text/plain
Die andere alternative ist, ändern Sie Ihre
Content-Type
zutext/plain
und fügen Sie eine nur-text-input-formatter zu Ihrem Projekt. Um das zu tun, erstellen Sie die folgende Klasse.Und die Konfiguration von Mvc zu benutzen.
Siehe auch
https://github.com/aspnet/Mvc/issues/5137
InformationsquelleAutor der Antwort Shaun Luttin
Shaun Luttin Antwort funktioniert, aber es fehlt ein wichtiges Stück von Informationen. Der Grund Ihr string ist, nicht anerkannt ist, weil es nicht ein JSON string.
Tun;
Dann können Sie den controller, wie es ist;
Es ist peinlich, wie lange dieser dauerte, um herauszufinden. Ich hoffe wirklich, dass es jemand hilft!
InformationsquelleAutor der Antwort statler
Müssen Sie einfach, um den Körper in Anführungszeichen, so dass es stellt eine
string
. Sie müssen auch verlassen Sie den Typ der Anforderung, alsapplication/json
. So wird der media-Typ formatter wird es herausfinden:Sollte den trick tun.
InformationsquelleAutor der Antwort Haney
lächerlich,
in dot net core, die Sie nicht verwenden, nur "frombody string-parameter".
sollten Sie eine model-Klasse für nur einen string-parameter.
=>
InformationsquelleAutor der Antwort guhyeon