Si vous définissez [Obligatoire] sur un type de référence et fournissez JSON sans attribut JSON correspondant, une erreur est renvoyée. Outre l'utilisation de types de valeurs NULL ou de types de valeur de retour à la ligne dans les classes, est-il possible d'appliquer [Required] sur un type de valeur lors de la désérialisation d'une requête à l'API Web?Possibilité d'appliquer [Obligatoire] sur les types de valeur
Obligatoire ne s'applique pas à Test1 ci-dessous car il est forcé à la valeur par défaut de zéro. Par exemple, si votre JSON n'inclut pas de propriété Field1, la sérialisation se termine correctement. Je voudrais être en mesure de mettre [Obligatoire] sur mon type de valeur ou éventuellement écrire un nouvel attribut pour accomplir ceci.
Y a-t-il un réglage pour cela? Ou, est-il possible de puiser dans la désérialisation à la fois pour XML et JSON pour y parvenir?
public async Task<IHttpActionResult> Method1(Clas1 model){}
public class Class1
{
...
[Required]
public int Field1 { get; set; }
}
Although it may not be possible with attributes, théoriquement désérialiseur pourrait vérifier l'attribut avant la valeur à contraindre le type de valeur. Si oui, y a-t-il des événements ou des paramètres dans lesquels je peux faire cela?
Avec Json.net, je peux ajouter un attribut [JsonProperty (Required = Required.AllowNull)]. Y a-t-il quelque chose de similaire que je peux faire pour la désérialisation XML?
Ie:
// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
public class RegisterBindingModel //: IValidatableObject
{
[Required]
public string Email { get; set; }
public int Test1 { get; set; }
[Required]
public int Test3 { get; set; }
<RegisterBindingModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication1.Models">
<Email>Sample string 2</Email>
<Test1>2</Test1>
</RegisterBindingModel>
N'aura-t-il pas toujours une valeur? Lorsque vous instanciez cette classe, Field1 aura une valeur de 0 si elle n'est pas explicitement définie sur une autre valeur. –
Oui, il le fera. Mais je veux invalider le ModelState et rejeter la demande si Field1 n'est pas explicitement fourni – Hoppe
* A part l'utilisation de types de valeur NULL * - Pourquoi avez-vous écarté cette approche? –