L'API Web de Formulaire de Collecte de Données
Je suis en train de poster forme sérialisée valeurs de contrôleur (API Web Auto Hôte).
Je ne comprends pas pourquoi le NameValueCollection n'est pas correctement lié.
Côté Client à l'aide de jQuery:
//Form Submit Handler
$( '#form-parameters' ).submit(function (event) {
event.preventDefault();
var formData = $(this).serialize();
//Post serialized form data
postAssemblyParameters(formData);
});
//Post Form Data to controller test
function postAssemblyParameters(formData){
$.ajax({
url: http://localhost/api/test/1,
type: 'POST',
data: formData,
dataType: 'application/x-www-form-urlencoded',
success: function(x3d) {
},
error: function(xhr) {
}
});
}
Côté serveur à l'aide de l'API Web de Soi de l'Hôte:
public void Post([FromUri] int id, [FromBody] NameValueCollection formData)
{
Console.WriteLine(id); //OK
//Collection is NULL
foreach (var key in formData.AllKeys)
{
foreach (var val in formData.GetValues(key))
{
Console.WriteLine(key + ": " + val);
}
}
}
Merci beaucoup.
OriginalL'auteur user1824269 | 2012-11-28
Vous devez vous connecter pour publier un commentaire.
Au lieu de NameValueCollection, essayez FormDataCollection.
http://weblogs.asp.net/cibrax/archive/2012/08/10/binding-form-data-in-asp-net-web-api.aspx
OriginalL'auteur scott stone
Ou vous pouvez utiliser la compilation "ReadAsNameValueCollection", comme ceci :
OriginalL'auteur HoefMeistert
Merci Scott. Votre réponse était juste ce dont j'avais besoin. Basé sur cela, j'ai écrit ce petit utilitaire méthode qui vous sera utile car il tire toutes les valeurs de données de la flux de données (à l'aide de la FormDataCollection) et les met dans une NamedValueCollection (auquel vous pouvez accéder dans n'importe quel ordre que vous voulez).
OriginalL'auteur Brad