Comment rendre les erreurs de client? AngularJS/WebApi ModelState
Je suis en train de construire un AngularJS un SPA avec WebApi pour le backend. Je suis à l'aide d'attributs pour la validation du modèle sur le serveur, si la validation échoue, c'est ce que j'retour de la ModelState.
{"Message":"The request is invalid.","ModelState":{"model.LastName":["Last Name must be at least 2 characters long."]}}
Comment puis-je rendre au client avec AngularJS?
//Save User Info
$scope.processDriverForm = function(isValid) {
if (isValid) {
//set button disabled, icon, text
$scope.locked = true;
$scope.icon = 'fa fa-spinner fa-spin';
$scope.buttonText = 'Saving...';
$scope.submitted = true;
$scope.formData.birthDate = $scope.formData.birthMonth + '/' + $scope.formData.birthDay + '/' + $scope.formData.birthYear;
$http({
method: 'POST',
url: 'api/Account/Register',
data: $.param($scope.formData),
headers: { 'Content-Type': 'application/x-www-form-urlencoded' } //set the headers so angular passing info as form data (not request payload)
})
.success(function (data) {
console.log(data);
toastr.success('User ' + $scope.formData.username + ' created!');
$scope.userForm.$setPristine();
$scope.formData = {};
//reset the button
$scope.locked = false;
$scope.icon = '';
$scope.buttonText = 'Save';
//reset validation submitted
$scope.submitted = false;
})
.error(function (data, response) {
console.log(data);
toastr.error('Ooops! There was an error creating the user. Try again and if the problem persists, contact Support.');
//reset the button
$scope.locked = false;
$scope.icon = '';
$scope.buttonText = 'Save';
$scope.submitted = false;
var resp = {};
var errors = [];
for (var key in resp.ModelState) {
for (var i = 0; i < resp.ModelState[key].length; i++) {
errors.push(resp.ModelState[key][i]);
}
}
$scope.errors = errors;
});
}
else {
toastr.warning('Invalid User Form, correct errors and try again.');
}
};
qu'avez-vous essayé ? Vous pouvez gérer cela par des dizaines de méthodes.. Cette question est que la façon de large. Vous choisissez d'abord le comportement de votre application pour dispaying (alerte ? popup ? collant de notification ?) ...
Désolé, je n'ai pas l'intention de la manière de rendu. Je n'étais tout simplement pas comment les erreurs de la ModelState tableau qui est passé avec les 400 BadRequest erreur
Désolé, je n'ai pas l'intention de la manière de rendu. Je n'étais tout simplement pas comment les erreurs de la ModelState tableau qui est passé avec les 400 BadRequest erreur
OriginalL'auteur Brad Martin | 2014-04-15
Vous devez vous connecter pour publier un commentaire.
Lors de votre appel à votre serveur, la capture de l'erreur en fonction du rejet de la
$http
promesse.Puis dans votre contrôleur, je voudrais suggérer l'aplatissement de la réponse à un tableau d'erreurs lors de la manipulation de l'erreur pour l'affichage comme indiqué dans ce violon exemple:
De mettre tout cela ensemble:
J'ai mis à jour le code dans ma réponse à montrer une solution plus complète.
Bon aller, et je comprends maintenant le processus. De grandes choses.
réponse.ModelState sera la réponse.modelState chameau de droit? l'api web va sérialiser il en camelcase je crois.
OriginalL'auteur Brocco
La façon la plus simple pourrait être de saisir toutes les erreurs de ModelState et de les mettre dans une nouvelle propriété sur le $scope.
Puis dans votre code HTML...
Ou, au lieu de le faire à chaque gestionnaire d'erreur, vous pouvez l'écrire une fois et s'en prévaloir pour chaque requête HTTP à l'aide d'un intercepteur. Je n'ai jamais écrit un moi-même, donc je vais simplement vous indiquer à la doc (défiler vers le bas pour les Intercepteurs de la section).
Il ressemble à @Brocco de la mise à jour devrait vous aider. Je n'ai rien à ajouter qu'il n'a pas dit. Bonne chance! 🙂
OriginalL'auteur Andrew