Meilleur moyen pour interrompre ou annuler l'action et de la réaction de ActionFilter
Meilleur moyen pour interrompre ou annuler l'action de ActionFilter
J'ai ce ActionFilter
, et il suppose de mettre fin à la connexion immédiatement et de retourner un 401 Des:
public class SignInRequired : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//User is verified, continue executing action
if (Acme.Web.CurrentUser != null)
{
return;
}
//End response with 401 Unauthorized
var response = HttpContext.Current.Response;
response.StatusCode = (int)HttpStatusCode.Unauthorized;
response.End();
//Prevent the action from actually being executed
filterContext.Result = new EmptyResult();
}
}
J'ai appris comment vous pouvez annuler l'action de l'exécution par la mise en contexte.Résultat = new EmptyResult()` ici, mais je ne suis pas sûr si c'est la meilleure façon d'éliminer la réponse et de fermer la connexion.
aussi vous vous demandez comment faire pour retourner 401. Bien que votre solution fonctionne pour moi, aucun de réponse m'a aidé.
OriginalL'auteur AgileMeansDoAsLittleAsPossible | 2011-03-03
Vous devez vous connecter pour publier un commentaire.
Réglage de la réponse signifie que l'action n'est pas appelée.
Comme d'autres réponses ont dit, cependant, l'authentification doit être fait avec un AuthorizeAttribute (Docs pour le Web.API ou pour MVC).
OriginalL'auteur Odeyinka Olubunmi
La réponse de @OdeyinkaOlubunmi est correct pour de l'API Web ou, plus spécifiquement,
System.Web.Http.Filters.ActionFilterAttribute
mais il ne peut pas être utilisé pourSystem.Web.Mvc.ActionFilterAttribute
.AuthorizeAttribute
et dominanteAuthorizeCore
est une bonne façon d'aller, mais si vous utilisez @de Vadim exemple pour un GlobalFilter vous obtiendrez l'erreur suivante dans une configuration standard:C'est parce que la valeur par défaut
/Login?ReturnUrl=
gardera ajout de nouvelles valeurs jusqu'à ce que la chaîne de requête provoque une exception.La façon dont je l'ai résolu pour MVC est comme ceci:
OriginalL'auteur Ogglas
Vous voudrez probablement faire un AuthorizeAttribute. Qui va définir le résultat à un UnAuthorizedResult automatiquement, et en plus il a l'avantage d'être exécuté avant tous les autres filtres. Vous pouvez également définir le Résultat à une nouvelle
HttpUnauthorizedResult
OriginalL'auteur Vadim
Vous pouvez définir le résultat de filterContext pour la page d'Exception comme ceci:
Voir plus de détails ici sur la section de l'Annulation de Filtre d'Exécution
OriginalL'auteur nelson eldoro
à l'aide .net de base 2.1 les solutions ci-dessus ne fonctionne pas pour moi , alors j'ai essayé et cela a fonctionné :-
si il y a de meilleures solutions .net de base 2.1 je suis ouverte aux suggestions
OriginalL'auteur Eassa Nassar