jQuery AJAX poste de Contrôleur MVC objet — demande de montre null
Je sais que je suis absent quelque chose dans les détails ici.
Problème
En dépit de Googler, en essayant d'exemples, différents formats, etc, la requête AJAX que j'envoie toujours est validé comme ayant tous les champs vides, mais ne pas être null.
Je pense que je ne suis pas en envoyant des choses dans le format approprié pour le contrôleur de la reconnaître comme un objet, mais je ne suis pas sûr de ce que.
Fiddler: Ce que ma requête ressemble à
Avec quelques données factices:
Code: Modèle De Classe
public class ContactUsMessage
{
public string Email { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
public string Message { get; set; }
}
Code: WebAPI Contrôleur
[HttpPost]
public HttpResponseMessage NewMessage(ContactUsMessage messageToSend)
{
if (messageToSend == null)
{
var sadResponse = Request.CreateResponse(HttpStatusCode.BadRequest, "Empty Request");
return sadResponse;
}
var messageValidator = new ContactUsMessageValidator();
var results = messageValidator.Validate(messageToSend);
var failures = results.Errors;
var sadString = "";
if (!results.IsValid)
{
foreach (var error in failures)
{
sadString += " Problem: " + error.ErrorMessage;
}
var sadResponse = Request.CreateResponse(HttpStatusCode.NotAcceptable, "Model is invalid." + sadString);
return sadResponse;
}
else
{
SendContactFormEmail(messageToSend.Email, messageToSend.Name, messageToSend.PhoneNumber, messageToSend.Message);
}
Code: JavaScript sur la Page
function sendSubmissionForm() {
var dataObject = JSON.stringify(
{
messageToSend: {
'Email': $('#inpEmail').val(),
'Name': $('#inpName').val(),
'PhoneNumber': $('#inpPhone').val(),
'Message': $('#inpMessage').val()
}
});
$.ajax({
url: '/api/contactus/newmessage',
type: 'POST',
done: submissionSucceeded,
fail: submissionFailed,
data: dataObject
});
}
OriginalL'auteur SeanKilleen | 2013-07-21
Vous devez vous connecter pour publier un commentaire.
Lorsque vous JSON.stringifyied vos données objet que vous avez converti en JSON. Mais vous avez oublié de définir le Type de Contenu entête de la requête et de l'API du Web n'a aucun moyen de savoir si vous êtes l'envoi de JSON, XML ou autre chose:
Également lors de la construction du JSON, vous n'avez pas besoin de l'envelopper dans une propriété supplémentaire qui correspond à votre argument de méthode nom de. La suivante devrait fonctionner:
+1 pour la belle réponse
Dimitrov, je vous dois une bière copain. vous épargnant de vie pour moi
OriginalL'auteur Darin Dimitrov