1

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> 
+0

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. –

+0

Oui, il le fera. Mais je veux invalider le ModelState et rejeter la demande si Field1 n'est pas explicitement fourni – Hoppe

+0

* A part l'utilisation de types de valeur NULL * - Pourquoi avez-vous écarté cette approche? –

Répondre

1

Si vous connaissez la gamme, vous pouvez utiliser l'attribut plage.

[Range(0, 99)] 
public int Field1{ get; set; } 
+0

Je cherche quelque chose de plus robuste. Je veux forcer la demande à fournir explicitement l'attribut – Hoppe