ASP.NET MVC: Response.Redirect (url, TRUE) n'arrête pas le traitement des demandes
J'ai une méthode, décoré avec deux personnalisées ActionFilterAttribute.
[RequiresAuthentication(Order = 1)]
[ToonAction(Order = 2)]
public ActionResult Browse(...
RequiresAuthentication
attribut est à venir à partir de cet article
À l'intérieur de RequiresAuthentication, c'est OnActionExecuting je fais:
filterContext.HttpContext.Response.Redirect(loginUrl, true);
La ligne est été exécuté, et les arguments sont tous comme prévu. Le problème est que, après exécution de la ligne ci-dessus, j'obtiens attribut suivant (ActionFilterAttribute) exécutée, comme si la redirection ne fonctionne pas, il continue simplement à l'exécution de la demande, au lieu de simplement la redirection du navigateur.
Question: de quoi dois-je faire pour faire la demande du gestionnaire
C'est une méthode complète:
public override void OnActionExecuting(ActionExecutingContext filterContext) {
//redirect if not authenticated
var identity = filterContext.HttpContext.User.Identity;
if (!identity.IsAuthenticated) {
//use the current url for the redirect
string redirectOnSuccess = filterContext.HttpContext.Request.Url.PathAndQuery;
//send them off to the login page
string redirectUrl = string.Format("?ReturnUrl={0}", redirectOnSuccess);
string loginUrl = FormsAuthentication.LoginUrl + redirectUrl;
filterContext.HttpContext.Response.Redirect(loginUrl, true);
//filterContext.Result = new HttpUnauthorizedResult();
//filterContext.HttpContext.Response.StatusCode = 0x191;
}
}
source d'informationauteur THX-1138
Vous devez vous connecter pour publier un commentaire.
Vous souhaitez définir le Résultat sur la filterContext à un RedirectResult, de ne pas faire une redirection sur la réponse.
EDIT: @Chasseur Daley suggère un mécanisme plus efficace serait d'utiliser la AuthorizeAttribute au lieu de cela si cela fonctionne pour vous. Si vous avez d'authentification/autorisation de scénarios, que l'AuthorizeAttribute ne fonctionne pas, il serait probablement préférable de déduire l'attribut personnalisé à partir de la place de la plus générique ActionFilterAttribute. Dans tous les cas, la bonne technique est de définir le Résultat plutôt que d'interagir avec la Réponse directement. Vous voudrez peut-être regarder à l'AuthorizeAttribute source à http://www.codeplex.com/aspnet pour des idées.
J'ai un échantillon de personnalisé autorisation code sur mon blog, http://farm-fresh-code.blogspot.comtrop.
essayez d'ajouter l'attribut [Authorize] à vos méthodes d'Action au lieu
Ajouter
au premier
et ce à la Fin :
Espère que cette aide.
vous pouvez utiliser
return RedirectToAction("Index", "Home/Login", new {area = "", returnURL = Request.Url.AbsolutePath});
pour arrêter le traitement en cours, la redirection vers le désiré (login) de la page et de quitter l'action.
le
area
route de la propriété est nécessaire pour sortir de la zone en cours si vous êtes en toute.