web-dev-qa-db-fra.com

API Web MVC, erreur: impossible de lier plusieurs paramètres

Je reçois une erreur lors du passage des paramètres,

"Impossible de lier plusieurs paramètres"

voici mon code

[HttpPost]
public IHttpActionResult GenerateToken([FromBody]string userName, [FromBody]string password)
{
    //...
}

Ajax:

$.ajax({
    cache: false,
    url: 'http://localhost:14980/api/token/GenerateToken',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: { userName: "userName",password:"password" },

    success: function (response) {
    },

    error: function (jqXhr, textStatus, errorThrown) {

        console.log(jqXhr.responseText);
        alert(textStatus + ": " + errorThrown + ": " + jqXhr.responseText + "  " + jqXhr.status);
    },
    complete: function (jqXhr) {

    },
})
13
Tom

Référence: Liaison de paramètres dans l'API Web ASP.NET - Utilisation de [FromBody]

Au plus, un paramètre est autorisé à lire dans le corps du message. Donc, cela ne fonctionnera pas :

// Caution: Will not work!    
public HttpResponseMessage Post([FromBody] int id, [FromBody] string name) { ... }

La raison de cette règle est que le corps de la demande peut être stocké dans un flux non tamponné qui ne peut être lu qu'une seule fois.

c'est moi qui souligne

Cela étant dit. Vous devez créer un modèle pour stocker les données agrégées attendues.

public class AuthModel {
    public string userName { get; set; }
    public string password { get; set; }
}

puis mettre à jour l'action pour attendre ce modèle dans le corps

[HttpPost]
public IHttpActionResult GenerateToken([FromBody] AuthModel model) {
    string userName = model.userName;
    string password = model.password;
    //...
}

s'assurer d'envoyer correctement la charge utile

var model = { userName: "userName", password: "password" };
$.ajax({
    cache: false,
    url: 'http://localhost:14980/api/token/GenerateToken',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(model),
    success: function (response) {
    },

    error: function (jqXhr, textStatus, errorThrown) {

        console.log(jqXhr.responseText);
        alert(textStatus + ": " + errorThrown + ": " + jqXhr.responseText + "  " + jqXhr.status);
    },
    complete: function (jqXhr) {

    },
})
32
Nkosi