2012-09-03 4 views
0

Je développe un site avec ASP.net MVC 2.0. Il y a une séquence de pages qui devrait se comporter comme un simple assistant sans retour. Les données doivent être partagées entre les pages. Je souhaite autoriser la redirection vers la page suivante d'un assistant uniquement à partir de l'actuel. Un modèle de vue de la page en cours devrait être passé à la page suivante qui sera utilisée pour implémenter une certaine logique. Tout utilisateur ne doit PAS avoir accès à l'URL de la deuxième page directement dans un navigateur.Restreindre l'accès à une page avec ASP.NET

J'ai essayé d'utiliser TempData avec une clé spécifiée pour enregistrer une vue modèle d'une page en cours en la passant à la suivante et en vérifiant si elle est NULL ou non pour afficher une page. Si la valeur d'une vue de modèle dans TempData est NULL, cela signifie qu'un utilisateur redirige vers cette page et non une précédente. Mais il y a le cas où un utilisateur peut rediriger vers la page suivante d'un assistant et sortir de là ailleurs sur un site (pour une instance à la page FAQ). Après cela, un utilisateur peut taper un lien direct de la page de l'assistant qui a été laissée et cette page sera affichée mais, logiquement, il devrait être redirigé vers la page d'erreur.

Question: Comment puis-je autoriser à rediriger vers une certaine page d'un assistant uniquement à partir d'un précédent et nulle part ailleurs?

Répondre

0

Je ne comprends pas complètement. Je pense que vous voulez restreindre l'URL de référence? Si oui, alors vous pourriez faire:

// Action code 

if(Request.UrlReferrer != "Valid url") 
{ 
    return View("Error"); 
} 
else 
{ 
    // render the next page of your wizard 
} 

Tout ce que vous avez besoin est une certaine logique pour déterminer ce qu'est un referrer URL valide est pour chaque étape.

Envisagez d'utiliser Session pour stocker vos données.

0

Je pense que je stockerais une valeur de page dans une variable de session. Sur le contrôleur de chaque page, vérifiez la variable de session pour voir que les étapes précédentes ont été visitées. Si ce n'est pas le cas, renvoyez RedirectToAction à l'étape précédente.

À la fin de chaque étape, après une validation réussie, définissez la variable de session pour indiquer qu'elle a été terminée, puis redirigez-la vers l'étape suivante.

Vous pouvez également partager les données entre les pages en utilisant des sessions aussi, bien que je sache que certains développeur grincer des dents à cela ... mais je ne suis pas si sûr pourquoi ... J'aime les sessions.

0

Vous pouvez restreindre votre méthode d'action à HttpPost:

[HttpPost] 
public ActionResult SecondPageAction(SomeType dataFromFirstPage) 
{ 
    .... 
} 
Questions connexes