Comment puis-je obtenir type de contrôleur et de l'action de l'info à partir d'une url ou à partir de données de la route?
Comment puis-je obtenir le contrôleur de l'action (méthode) et le type de contrôleur qui sera appelé, compte tenu de la System.Web.Routing.RouteData
?
Mon scénario est-ce - que je veux être en mesure de faire effectuer certaines actions (ou pas) dans le OnActionExecuting
méthode pour une action.
Cependant, j'ai souvent envie de savoir non pas l'action en cours, mais la "racine" de l'action; par cela, je veux dire que je peut avoir une vue appelée "Connexion", qui est ma page de connexion. Ce point de vue peut inclure
une autre vue partielle "LeftNav". Lorsque OnActionExecuting
est appelé pour LeftNav, je veux être en mesure de déterminer que c'est vraiment être appelé à la "racine" aciton de Connexion.
Je me rends compte qu'en appelant RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext)
, je peux obtenir l'itinéraire de la "racine" de la demande, mais comment la mettre en
la méthode et le type d'info?
La seule solution que j'ai à ce jour, est quelque chose comme:
var routeData = RouteTable.Routes.GetRouteData(actionExecutingContext.HttpContext)
var routeController = (string)routeData.Values["controller"];
var routeAction = (string)routeData.Values["action"];
Le problème, c'est que "routeController" est le nom du contrôleur avec le "Contrôleur" suffixe supprimé, et n'est pas pleinement qualifié; c'est à dire c'est "Login", plutôt que "MyCode.Site web.LoginController".
Je serais plutôt d'obtenir une réelle Type
et MethodInfo
si possible, ou au moins un type pleinement qualifié du nom.
Toutes les pensées, ou d'autres approches?
[MODIFIER - c'est ASP.Net MVC 1.0]
OriginalL'auteur Rob Levine | 2010-04-22
Vous devez vous connecter pour publier un commentaire.
OK, désolé, j'ai raté la "racine".
Puis, d'une autre façon, vous pouvez économiser type de contrôleur de stockage thread. Pseudo:
Juste une idée. Je suis sûr que thread local storage est disponible en C#. L'idée clé ici est que vous l'enregistrer uniquement pour une première demande, donc il est toujours à la racine du contrôleur.
C'est une très intéressante suggestion de - grâce queen3
N'utilisez pas de ThreadLocal de stockage au sein d'une ASP.NET application. ASP.NET les demandes peuvent sauter entre les threads, donc ThreadLocal de stockage peut disparaître quand vous ne l'attendez pas. Utilisation HttpContext.Les objets plutôt que si vous avez besoin de stocker des informations qui colle autour de la demande.
En fait, je n'étais pas au courant de tout ASP.NET collection qui stocke les données uniquement pour la requête courante. Sûr que c'est mieux que de fil de stockage. Merci pour l'astuce.
OriginalL'auteur queen3
Voici la solution que j'ai compilées à partir de diverses sources. Le url variable doit contenir l'URL de l'action:
OriginalL'auteur VitalyB
Envisagez-vous de la mise en œuvre similaire à cela? Certains tentent/Captures nécessaire!!!
Gentillesse,
Dan
OriginalL'auteur Daniel Elliott
MvcSiteMapProvider fait cela. Voici le code de cette chose en particulier.
Voici le code
OriginalL'auteur rodmjay