2010-10-19 6 views
0

J'ai un attribut personnalisé qui vérifie les conditions et redirige l'utilisateur vers des parties de l'application, selon les besoins de l'entreprise. Le code ci-dessous est typique.Comment valider un chemin dans ASP.NET MVC 2?

public override void OnActionExecuting(ActionExecutingContext filterContext) 
{ 
    // ... 
    if (condition) 
    { 
    RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary(); 
    redirectTargetDictionary.Add("action", "MyActionName"); 
    redirectTargetDictionary.Add("controller", "MyControllerName"); 
    filterContext.Result = new RedirectToRouteResult(redirectTargetDictionary); 
    } 
    // ... 
    base.OnActionExecuting(filterContext); 
} 

m'a juste demandé de permettre à l'utilisateur de choisir une page par défaut qu'ils arrivent à lors de la connexion Lors de l'ajout de cette fonction, je remarquai que l'utilisateur peut obtenir un comportement inhabituel si il n'y a pas d'action/contrôleur correspondant à la page par défaut de l'utilisateur (c'est-à-dire si l'application a été modifiée). J'utilise actuellement quelque chose comme le code ci-dessous mais je pense à des actions/contrôleurs explicites. Comment vérifier la validité du résultat avant de l'assigner à filterContext.Result? Je veux être sûr qu'il correspond à une partie active de mon application avant de la rediriger - sinon je ne l'attribuerai pas à filterContext.Result.

Répondre

0

Je n'ai pas de réponse complète, mais je commencerais par aller à RouteTable, récupérer la collection, appeler GetRouteData avec une implémentation personnalisée de HttpContextBase pour obtenir RouteData. Une fois terminé, sinon null, vérifiez si le gestionnaire est un MvcRouteHandler.

Lorsque vous avez jusqu'à présent, consultez this answer :)