ASP.Net Web Api modèle non contraignant sur POST
Je suis en train de publier les données JSON à une Api Web méthode, mais les données JSON n'est pas contraignant pour le modèle.
Voici mon modèle:
[DataContract]
public class RegisterDataModel
{
[DataMember(IsRequired = true)]
public String SiteKey { get; set; }
[DataMember(IsRequired = true)]
public String UserId { get; set; }
[DataMember(IsRequired = true)]
public String UserName { get; set; }
}
Voici mon Api Web d'action:
public class RegisterController : ApiController
{
public Guid Post([ModelBinder] RegisterDataModel registerDataModel)
{
if (!ModelState.IsValid)
{
throw new ModelStateApiException(ModelState);
}
var userProfileDataContract = userProfileBusinessLibrary.GetNewOne();
userProfileDataContract.UserId = registerDataModel.UserId;
userProfileDataContract.UserName = registerDataModel.UserName;
var userKey = userProfileBusinessLibrary.Register(registerDataModel.SiteKey, userProfileDataContract);
return userKey;
}
}
Avant j'ai ajouté [ModelBinder], registerDataModel était nulle. Après l'ajout de [ModelBinder], registerDataModel est un RegisterDataModel exemple, mais toutes les valeurs de propriété sont nulles.
Voici ma Demande via le Violoneux:
http://local.testwebsite.com/api/register
Request Headers:
User-Agent: Fiddler
Host: local.testwebsite.com
Content-Length: 89
Content-Type: application/json; charset=utf-8:
Request Body:
{
"SiteKey":"qwerty",
"UserId": "12345qwerty",
"UserName":"john q"
}
Ce qui me manque pour faire mon post lier des données à la RegisterDataModel propriétés? Merci pour votre aide.
source d'informationauteur Tom Schreck
Vous devez vous connecter pour publier un commentaire.
Comment êtes-vous de la création du JSON demande? Par Fiddler générateur de requête? Essayez les opérations suivantes dans le corps de la requête.
Je devine 'du Corps de la Requête:" est également une partie de votre corps de la requête. Retirez et vérifiez.
Pas liées à l'OP du problème, mais le titre de la question
m'a conduit ici, lorsque j'ai utilisé (public) champs au lieu de propriétés
dans le Modèle de la classe (c'est à dire pas de
{get; set;}
).Il s'est avéré que cela entraîne également la liaison à l'échec.
Peut-être aider quelqu'un.
Dans mon cas, l'application demandes sont transmises par le biais d'un middleware appelé "directeur de l'API" pour l'authentification /autorisation avant de les transmettre à mon .NET Web API. POST le paramètre n'est pas appliqué parce que, pour une raison que je ne suis pas idée de pourquoi, le "Content-Length" est émise à partir des en-Têtes.La raison en est que, par défaut JsonMediaTypeFormatter toujours vérifier les demandes de' Content-Length avant de faire la liaison du modèle, et si la Longueur du Contenu n'est pas présenté, il fixe le paramètre à NULL.