2010-07-22 12 views
0

Nombre:restreindre l'utilisateur du contrôleur de saut et des méthodes d'action

Mon application ASP.NET MVC 1.0 est plus comme un flux de travail.

Moyens: méthode d'action du contrôleur Parent (authentification) -> Enfant 1 Méthode d'action -> Enfant 2 Méthode d'action -> Enfant n action

Maintenant, une fois que le visiteur réalise l'authentification par la méthode d'action du contrôleur parent il peut manupuler l'URL et passer directement à la méthode d'action enfant 2. Nous voulons éviter cela et dans ce cas, nous voulons une page d'erreur.

Comment pouvons-nous mettre en œuvre pour empêcher l'utilisateur d'Jumpin de 1 à une autre méthode d'action?

Répondre

2

Vous pouvez utiliser TempData fournir une clé et si cette valeur isnt là, vous pouvez rediriger l'utilisateur à l'étape précédente.

Ou vous pouvez décorer les méthodes d'action ultérieures avec [HttpPost], définissez chaque action Form à la méthode d'action suivante dans le contrôleur, et les actions ne seriez pas disponibles pour GET demandes.

+0

Merci beaucoup! Je pensais avoir une solution plus avancée. Nous avons beaucoup de flux de travail comme ceux-ci. Donc le travail impliqué serait énorme. Pouvons-nous décorer la méthode Action pour que nous puissions réaliser la même chose? – amit

+0

Vous pouvez utiliser le 'HandleErrorAttribute', à savoir:' [HandleError (Voir = "YourErrorPageView", ExceptionType = typeof (TriedToGoToStepNotAuthorizedForException))] '. Vous pouvez également personnaliser 'FilterAttribute' (ou étendre' HandleErrorAttribute') qui vous permet de spécifier les critères dont vous avez besoin pour l'exécution de la méthode, tels que HttpMethods, QueryString key/values, etc. I Je crois que l'utilisation d'attributs de cette façon vous permettrait de faire en sorte que ActionMethod se concentre sur sa propre exécution, tandis que 'FilterAttribute' peut gérer la décision d'exécuter la méthode. –

+0

Existe-t-il un moyen par lequel le précédent a visité (contrôleur/nom de l'action) quelque chose comme référant? Pour que je puisse vérifier la méthode d'action enfant si le référent est le Parent ou non! S'il vous plaît donnez votre avis. – amit

0

Faites vos méthodes d'action des enfants privés de sorte qu'ils ne sont accessibles via l'action des parents.

[Authorize] 
public ActionResult Parent(string color) 
{ 
    if(color=="Red") 
     return Child1(); 
    return Child2(); 
} 

private ActionResult Child1() 
{ 
    return View("this"); 
} 

private ActionResult Child2() 
{ 
    return View("that"); 
} 

~/Contrôleur/Parent routes vers Controller.Parent().

~/contrôleur/voies CHILD1 à 404: Introuvable. ~/Controller/Child2 achemine vers 404: introuvable.

+0

Dear Byron .. Votre suggestion peut ne pas fonctionner: Méthode d'action sont des méthodes publiques accessibles sur le web. Si vous le rendez privé vous ne pouvez pas naviguer à partir de n'importe quelle méthode d'action via RedirectToAction – amit

+0

Exactement.Tant que votre méthode parent est dans la même classe que vos méthodes enfants, vous pouvez appeler return ChildMethod(). –