ASP.NET MVC - CustomeAuthorize l'action du filtre à l'aide d'un site web externe pour loggin de l'utilisateur
J'ai un CustomeAuthorize action de filtre qui transmet à l'utilisateur de signin page si l'utilisateur n'est pas authentifié. J'ai appliquer ce filtre à des actions ou des contrôleurs.
[CustumeAuthorize]
public ActionResult MyAction()
{
//do something here
return View();
}
et le filtre ressemble à ceci:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!currentUserIsAuthenticated)
{
filterContext.Result =
new RedirectToRouteResult(
new RouteValueDictionary{{ "controller", "Account" },
{ "action", "SignIn" },
{ "returnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
else
{
base.OnActionExecuting(filterContext);
}
}
}
Une fois que j'affecter une valeur à filterContext.Résultat, après l'exécution de filtre finitions, l'exécution est (en quelque sorte?!) redirigé vers le Compte d'action et MyAction n'est pas exécutée. C'est exactement ce que je veux.
Maintenant dire que je veux changer mon CustomAuthorize pour authentifier l'utilisateur par rapport à un site web externe et non pas ma propre SignIn action donc je suis en train de faire quelque chose comme ceci:
public class CustomAuthorizeAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!currentUserIsAuthenticated)
{
filterContext.HttpContext.Response.Redirect("http://externalSite.com/login?returnUrl=" + filterContext.HttpContext.Request.RawUrl);
}
else
{
base.OnActionExecuting(filterContext);
}
}
}
Mon problème est qu'après l'exécution de la deuxième version de CustomAuthorize filtre est fini, l'exécution se poursuit à MyAction qui n'est pas ce que je veux! Comment puis-je arrêter l'exécution de MyAction après le filtre dans ce cas?
-Mise à jour- je viens de tomber sur une nouvelle question. Mon application MVC est dans une iFrame et je souhaite le Rediriger vers la force de l'image actuelle comme le cadre principal après la redirection, donc je suis en train de faire quelque chose comme:
string url = "http://externalSite.com/login?returnUrl=" + filterContext.HttpContext.Request.RawUrl;
filterContext.HttpContext.Response.Write("<script type=\"text/javascript\">\ntop.location.href = \"" + url + "\";</script>");
Est-il un moyen de passer un javascript pour RedirectResult()?
OriginalL'auteur xraminx | 2009-05-07
Vous devez vous connecter pour publier un commentaire.
Utiliser le RedirectResult similaire à la façon dont vous avez été en utilisant le RedirectToRouteResult avant de remplacer le résultat dans le contexte de filtre.
Vous voudrez peut-être essayer de passer à l'arrière d'un réel qui contient le code Javascript pour faire la redirection. Il y a un JavaScriptResult, aussi, que vous pourriez essayer. Je n'ai pas utilisé cette.
le JavaScriptResult écrire le retour de javascript dans <pre> </pre> bloc! Je ne sais pas pourquoi. J'ai simplement fait un mannequin d'action le fait tout le forwarding pour moi et transmis à cette action, tout comme je l'ai fait dans le premier cas démontré ci-dessus. Merci pour votre aide 🙂
OriginalL'auteur tvanfosson
Permettez-moi de voir si j'ai bien compris, vous avez un iFrame, et l'exécution d'une action à l'intérieur de cette iFrame. Vous souhaitez rediriger vers une page parent, pas à l'intérieur de cette iFrame?
Si oui, il suffit d'utiliser la fonction Redirect(url) dans votre action.
OriginalL'auteur Elena P.
Vous pouvez ajouter un jugement par jQuery sur la page de connexion.
OU
modifier " filterContext.Le résultat en action "OnActionExecuting'
OriginalL'auteur xiang wang