2016-08-02 1 views
1

Dans mon contrôleur, je mets un chèque:Validation fluide: comment personnaliser le format de message de demande incorrecte?

if (!ModelState.IsValid) 
{ 
    return BadRequest(ModelState); 
} 

Cela me donne l'erreur est format spécifique, par exemple:

{ 
    "Message": "The request is invalid.", 
    "ModelState": { 
    "stocks.SellerType": [ 
     "SellerType should be greater than 101" 
    ], 
    "stocks.SourceId": [ 
     "SourceId should be less than 300" 
    ] 
    } 
} 

Comment puis-je personnaliser ce format de message d'erreur. Je sais comment personnaliser les messages d'erreur, c'est-à-dire "SourceId devrait être inférieur à 300". Mais je n'ai aucune idée comment puis-je changer "Message", supprimer ou renommer le champ json "ModelState"?

+0

un wrapper qui retournera un ModelState plus petit serait OK pour vous? par exemple: votre propre objet personnalisé avec message (et d'autres champs, si nécessaire) – meorfi

+0

oui je veux mon propre objet personnalisé. – maverick

+0

Où vous obtenez cette erreur, sur 'controller'? –

Répondre

1

Mise à jour: pour changer le message par défaut et garder formatage par défaut pour les ModelState erreurs que vous pouvez utiliser HttpError classe:

if (!ModelState.IsValid) 
{ 
    return Content(HttpStatusCode.BadRequest, 
     new HttpError(ModelState, includeErrorDetail: true) 
     { 
      Message = "Custom mesage" 
     }); 
} 

Ou vous pouvez définir votre propre modèle pour résultat de validation et de le retourner avec le code d'état requis (renommer le champ json "ModelState"). Par exemple:

class ValdationResult 
{ 
    public string Message { get; } 
    public HttpError Errors { get; } 

    public ValdationResult(string message, ModelStateDictionary modelState) 
    { 
     Message = message; 
     Errors = new HttpError(modelState, includeErrorDetail: true).ModelState; 
    } 
} 
... 

if (!ModelState.IsValid) 
{ 
    return Content(HttpStatusCode.BadRequest, 
     new ValdationResult("Custom mesage", ModelState)); 
} 
+0

Salut, Je l'ai essayé et j'ai eu une série sérieuse avec k__BackingField? {"Message": "La requête est invalide.", "Erreurs": {"netMonthly": {"_erreurs": [{" k__BackingField": null, " k__BackingField": "message d'erreur"}], " k__BackingField": null}}} –

+0

@LeszekRepie, vous avez raison. C'était juste un exemple comment retourner une réponse personnalisée avec le code d'état 'BadRequest'. Voir la mise à jour - le formatage par défaut sera conservé. –