web-dev-qa-db-fra.com

Publier des données JSON dans le corps vers l'API Web

Je reçois toujours une valeur nulle du corps pourquoi? Je n'ai aucun problème avec l'utilisation du violoneux mais le facteur est un échec.

J'ai une API web comme ça:

    [Route("api/account/GetToken/")]
    [System.Web.Http.HttpPost]
    public HttpResponseBody GetToken([FromBody] string value)
    {
        string result = value;
    }

Mes données de facteur: enter image description here

et en-tête: enter image description here

9
Mennan

WebAPI fonctionne comme prévu car vous lui dites que vous envoyez cet objet json:

{ "username":"admin", "password":"admin" }

Ensuite, vous lui demandez de le désérialiser en tant que string, ce qui est impossible car ce n'est pas une chaîne JSON valide.

Solution 1:

Si vous souhaitez recevoir le JSON réel comme dans la valeur de value sera:

value = "{ \"username\":\"admin\", \"password\":\"admin\" }"

alors la chaîne dont vous avez besoin pour définir le corps de la demande dans postman est:

"{ \"username\":\"admin\", \"password\":\"admin\" }"

Solution 2 (je suppose que c'est ce que vous voulez):

Créez un objet C # qui correspond au JSON afin que WebAPI puisse le désérialiser correctement.

Créez d'abord une classe qui correspond à votre JSON:

public class Credentials
{
    [JsonProperty("username")]
    public string Username { get; set; }

    [JsonProperty("password")]
    public string Password { get; set; }
}

Ensuite, dans votre méthode, utilisez ceci:

[Route("api/account/GetToken/")]
[System.Web.Http.HttpPost]
public HttpResponseBody GetToken([FromBody] Credentials credentials)
{
    string username = credentials.Username;
    string password = credentials.Password;
}
9
Nasreddine

Vous publiez un objet et essayez de le lier à une chaîne. À la place, créez un type pour représenter ces données:

public class Credentials
{
    public string Username { get; set; }
    public string Password { get; set; }
}

[Route("api/account/GetToken/")]
[System.Web.Http.HttpPost]
public HttpResponseBody GetToken([FromBody] Credentials value)
{
    string result = value.Username;
}
3
Bruno Garcia