compte sera ouvert comme d'habitude:RedirectToRoute (« Default ») Non Réorientation, retour HTML de LogOn PartialViewResult Au lieu
public ActionResult Index()
{
return View();
}
cela va rendre le gabarit de vue suivant: (car à ce stade, il n'y a pas CurrentUser, ' utilisateur » est nulle, donc il fonctionne Html.RenderAction("LogOn", "Account");
)
<% var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];
if (user == null || user.IsLoggedIn == false || user.IsPublic)
{
Html.RenderAction("LogOn", "Account");
} else { %>
<span class="PageNavLink">
<% Html.RenderPartial("AccountMenu"); %>
</span>
<div id="IndexContent" class="IndexContent">
<% Html.RenderAction("UserList", "Account"); %>
</div>
<% } %>
donc je tape le nom d'utilisateur & mot de passe et le code suivant exécute (et l'utilisateur est ajouté à la session pour retreival plus tard) et je redirigés vers la page que je veux:
(spécifiquement return Redirect(redirect);
)
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(WAPConfigUser user)
{
if (!ValidateLogOn(user.UserName, user.Password))
{
return PartialView();
}
else
{
string redirect = "";
if (Request.QueryString["ReturnUrl"] != null)
{
redirect = Request.QueryString["ReturnUrl"].ToString();
return Redirect(redirect);
}
else
{
return RedirectToRoute("Default");
}
}
}
dehors et je me connecter alors je redirigé vers l'écran d'ouverture de session:
public RedirectToRouteResult LogOut()
{
Session.Remove("CurrentUser");
return RedirectToAction("Index", "Account");
}
Quand je tape mon nom d'utilisateur & mot de passe, le premier point d'arrêt qui obtient hit est: (qui tente de charger la page entière, il semble)
public ActionResult Index()
{
return View();
}
le prochain point d'arrêt qui obtient frappé est la ligne return RedirectToRoute("Default");
:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult LogOn(WAPConfigUser user)
{
if (!ValidateLogOn(user.UserName, user.Password))
{
return PartialView();
}
else
{
string redirect = "";
if (Request.QueryString["ReturnUrl"] != null)
{
redirect = Request.QueryString["ReturnUrl"].ToString();
return Redirect(redirect);
}
else
{
return RedirectToRoute("Default");
}
}
}
mais si je fais un pas dans le code ma route par défaut ne sera exécuté. Lorsque je fais un pas à la ligne suivante, il va à la ligne suivante Html.RenderAction("LogOn", "Account");
à nouveau dans la vue d'index de mon AccountController et que (juste le contrôle de l'utilisateur) est renvoyée au navigateur:
<% var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];
if (user == null || user.IsLoggedIn == false || user.IsPublic)
{
Html.RenderAction("LogOn", "Account");
} else { %>
<span class="PageNavLink">
<% Html.RenderPartial("AccountMenu"); %>
</span>
<div id="IndexContent" class="IndexContent">
<% Html.RenderAction("UserList", "Account"); %>
</div>
<% } %>
Il y a quelques choses que je fais pas comprendre ici.
- Pourquoi
RedirectToRoute("Default")
ne pas me rediriger vers l'itinéraire par défaut? - Pourquoi l'utilisateur est-il nul après l'avoir ajouté à la session lorsque je me suis connecté la deuxième fois? (par exemple, la ligne
var user = (WAPConfigUser) HttpContext.Current.Session["CurrentUser"];
doit renvoyer l'utilisateur connecté que je viens d'ajouter à la session précédente. Cette ligne n'est pas touchée par le point d'arrêt, donc il semble y avoir un autre utilisateur NOT-logged-in. exécuter une ligne qui ne devrait pas être, sur une page qui ne devrait pas être
Je sais que je vais probablement être abattu pour ajouter l'utilisateur à la session, mais est-ce que quelqu'un a une idée de ce qui se passe? Si plus d'informations sont nécessaires, demandez & Je vais mettre à jour la question.
Merci
Dave
Vous devez vérifier la connexion du navigateur avec Fiddler pour voir si une redirection est renvoyée. Vous ne pouvez pas "enjamber" une redirection. –