Problema SfondoRimuovere eccezioni JSON.net serializzazione dal ModelState
Per salvare me stesso da duplicare la logica di convalida sto seguendo un modello di spingere lato Server ModelState
errori a mio avviso Model (MVVM KnockoutJS).
Quindi per convenzione i miei nomi di proprietà sul mio KO
ViewModel corrispondono alle proprietà che la mia Api sta esponendo e aspettandosi, quindi posso mappare l'una con l'altra facilmente usando un piccolo plugin di Knockout che ho scritto.
<validation-summary params="vm: $data, class: 'alert alert-error'"></validation-summary>
...
<div class="control-group" data-bind="errorCss: {'error': spend }">
<label class="control-label" for="spend">Spend</label>
<div class="controls">
<div class="input-prepend">
<span class="add-on">$</span>
<input type="text" data-bind="value: spend" id="spend" class="input-medium" placeholder="Spend USD" />
</div>
<validation-message params="bind: spend, class: 'text-error'"></validation-message>
</div>
</div>
Il problema
problema per me è che quando JSON.Net serialises il JSON mando via e AJAX e quando incontra un'eccezione si aggiunge questo al ModelState
come e Exception
sul ModelError
Classe.
Esempio di risposta:
{
"message": "The request is invalid.",
"modelState": {
"cmd.spend": [
"Error converting value \"ii\" to type 'System.Double'. Path 'spend', line 1, position 13.",
"'Spend' must be greater than '0'."
],
"cmd.Title": [
"'Title' should not be empty."
]
}
}
Il problema è che questo messaggio non è esattamente dare un grande UX:
Error converting value "ii" to type 'System.Double'. Path 'spend', line 1, position 13.
E il fatto che io sono in grado di separare questo messaggio di eccezione dal mio messaggi di convalida poiché sono tutti in una matrice.
preferirei rimuovere questo e gestire questa materia nel mio ValidationClass
posso rimuovere manualmente in questo modo, e questo è in un ActionFilter quindi ho solo una volta.
public class ValidateCommandAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
ModelStateDictionary modelState = actionContext.ModelState;
#if !DEBUG
for (int i = 0; i < modelState.Values.Count; i++)
{
ModelErrorCollection errors = modelState.ElementAt(i).Value.Errors;
for (int i2 = 0; i2 < errors.Count; i2++)
{
ModelError error = errors.ElementAt(i2);
if (error.Exception != null)
{
// TODO: Add Log4Net Here
errors.RemoveAt(i2);
}
}
}
#endif
if (!modelState.IsValid)
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
}
}
so JSON.Net è altamente configurabile e volevo sapere se c'è da qualche parte nelle API per esso dove posso disattivare questa funzionalità, o sopprimerla?
Basta chiedersi ma si ottiene ancora quell'errore quando non si esegue il debug? –
No, quando in modalità di rilascio rimuove le eccezioni. Vedo gli errori durante il debug che pensavo potesse essere utile. – SimonGates