ASP.NET API de Base paramètre POST est toujours null
J'ai lu les suivantes:
- Asp.net de Base paramètre Post est toujours null
- asp.net webapi 2 paramètre post est toujours null
- web-api corps POST objet toujours null
- Web Api Paramètre toujours null
Mon point de terminaison:
[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();
}
Ma demande:
$http.post(ENDPOINTS["Validate Cookie"], cookie , {'Content-Type': 'application/json'});
Où cookie
est l'une chaîne je fais des envois à partir de la saisie de l'utilisateur.
La demande des messages à l'extrémité avec les données appropriées. Cependant, ma chaîne est toujours null. J'ai essayé de supprimer les [FromBody]
balise, ainsi que l'ajout d'un =
en face de la publication des données à pas de chance. J'ai aussi essayé l'ajout et la suppression de différents types de contenu avec toutes les combinaisons ci-dessus.
La raison pour laquelle je fais cette action spécifique est longue et n'a pas d'importance pour cette question.
Pourquoi mon paramètre toujours null peu importe ce que je semble l'être?
Edit: j'ai aussi essayé d'utiliser {cookie: cookie}
Edit2: La demande:
Request URL:http://localhost:54093/getter/validatecookie
Request Method:POST
Status Code:400 Bad Request
Remote Address:[::1]:54093
En-Têtes De Réponse
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?=
En-Têtes De Requête
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
Demande De La Charge Utile
=sec_session_id=[redacted]; _ga=[redacted]; AWSELB=[redacted]
Oui, je l'ai mentionné qu'il ne post avec les données appropriées. Les données sont envoyées dans la requête.
Au lieu de publier la façon dont vous faites la requête AJAX, pourriez-vous poster le réel de la requête HTTP avec ses en-têtes et de son corps. Qui pourraient aider au dépannage.
J'ai ajouté de la demande en y
Votre demande de charge utile n'est pas JSON alors que votre Type de Contenu application/json.
OriginalL'auteur Douglas Gaskell | 2017-01-23
Vous devez vous connecter pour publier un commentaire.
Le problème est que le
Content-Type
estapplication/json
, alors que la demande de la charge utile est en faittext/plain
. Qui va provoquer une 415 Unsupported Media Type d'erreur HTTP.Vous avez au moins deux options pour les aligner puis
Content-Type
et le contenu réel.Utilisation de l'application/json
Garder le
Content-Type
commeapplication/json
et assurez-vous que la demande de la charge utile est JSON valide. Par exemple, faites votre demande de charge utile ce:Alors l'action de la signature doit accepter un objet de la même forme que l'objet JSON.
Au lieu de la
CookieWrapper
classe, ou vous pouvez l'accepter dynamique, ou unDictionary<string, string>
et l'accès commecookie["cookie"]
dans le point de terminaisonUtiliser text/plain
L'autre alternative est de changer votre
Content-Type
àtext/plain
et pour ajouter une saisie de texte brut formateur à votre projet. Pour ce faire, créez la classe suivante.Et configurer Mvc pour l'utiliser.
Voir aussi
https://github.com/aspnet/Mvc/issues/5137
Eu... ASP.NET de Base ne prend pas en charge
text/plain
comme unContent-Type
hors de la boîte.Shaun, j'ai fini par utiliser
Dictionary<string,string>
avec un{"cookie":cookie}
objet. Je accéder ensuite commecookie["cookie"]
dans mon point de terminaison. Je vais accepter votre réponse si vous pouvez l'ajouter en tant que l'une des solutions possibles.Cela ne devrait pas être la réponse. Vous pouvez envoyer une chaîne de caractères très facilement dans .Net de Base sans tout cela jiggery pokery. Se référer à ma réponse ci-dessous
Un simple programme de formatage de texte est inclus avec ASP.NET Core: docs.microsoft.com/en-us/aspnet/core/mvc/advanced/...
OriginalL'auteur Shaun Luttin
Shaun Luttin la réponse de travaux, mais il en manque un élément d'information important. La raison de votre chaîne n'est pas reconnue, c'est parce qu'il n'est pas un JSON chaîne.
Ce faire;
Pas, vous pouvez laisser le contrôleur qu'il est;
Il est gênant combien de temps cela m'a pris à la figure. J'espère vraiment que ça aide quelqu'un!
OriginalL'auteur statler
Il vous suffit de placer le corps dans guillemets, tel qu'il représente un
string
. Vous avez également besoin de quitter le type de demande queapplication/json
. De cette façon, le type de support formateur fera comprendre:Devrait faire l'affaire.
cookie
est déjà une chaîne de caractères, il est passé autour de la JS comme une chaîne de caractères.Droit, mais la demande de la charge utile doit également être encapsulées dans des guillemets doubles pour le type de média formateur à gérer la
[FromBody]
attribut correctement.OriginalL'auteur Haney
ridiculement,
en dot net de base vous ne pouvez pas utiliser juste "frombody paramètre de chaîne".
vous devriez en faire un modèle de classe pour juste un paramètre de chaîne.
=>
OriginalL'auteur guhyeon