L'Api Web - comment arrêter le web pipeline directement à partir d'un OnActionExecuting Filtre
J'ai un pré-action de l'api web crochet qui va vérifier ModelState.IsValid. Si le ModelState n'est pas valide, je ne veux pas exécuter l'action, et il suffit de retourner mon message immédiatement. Comment dois-je faire exactement?
public class ValidateModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) {
if (!actionContext.ModelState.IsValid)
{
var msg = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
//Now What?
}
base.OnActionExecuting(actionContext);
}
}
OriginalL'auteur George Mauer | 2013-05-29
Vous devez vous connecter pour publier un commentaire.
définir le temps de Réponse.Résultat. Si le résultat n'est pas null, il ne sera pas exécuter l'action. la syntaxe exacte échapper à moi, mais c'est aussi simple que
oui, vous pouvez appeler
base
OriginalL'auteur Jason Meckley
Avez-vous réellement vu l'exemple de la ASP.NET WebApi page?
Ressemble beaucoup à ce que vous essayez d'atteindre et tout ce qu'ils font est de définir la Réponse de l'objet de Contexte:
If model validation fails, this filter returns an HTTP response that contains the validation errors. In that case, the controller action is not invoked.
http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-api
voir:
Handling Validation Errors
OriginalL'auteur Joanna Derks
Ma conjecture est que vous devriez jeter un HttpResponseException
Il va travailler pour ActionFilters, ce n'est pas sûr AuthorizationFilters. Comme Joanna mentionné apparemment, vous pouvez également définir le temps de Réponse. Wow, j'ai vraiment la haine ActionFilters, de sorte que beaucoup de complexité pour aucune raison.
Que voulez-vous dire? Comment faites-vous d'autre de la croix-coupe préoccupations? À l'aide de classes de base pour ce qui en général se transforme en un immense inflexible désordre une fois que vous obtenez assez de transversales préoccupations. La seule autre option finit par être quelque chose comme PostSharp qui a sa propre série de problèmes.
J'utilise MessageHandlers pour la plupart de mes transversale des préoccupations. Pour l'action spécifique des choses, ce qui est vraiment la différence entre les Autoriser l'ajout d'un attribut et d'appel d'Autoriser() dans l'action elle-même? Au moins avec un appel direct je sais exactement quand cela va arriver.
J'ai besoin de regarder dans MessageHandlers - comme pour l'autre, la différence est que les filtres peuvent être ajoutés à l'échelle mondiale et de faire partie de votre infrastructure.
OriginalL'auteur Darrel Miller