J'ai une URL. Est-il possible d'obtenir en quelque sorte le nom du contrôleur et de l'action ainsi que les valeurs de route? (qui serait normalement généré par le framework .NET MVC basé sur la définition dans global.asax)Est-il possible d'obtenir le controller, action et routeValues à partir d'une URL (basée sur les routes Global.asax)?
1
A
Répondre
3
Il est possible de vérifier Haacked routing debugger.
6
Où et quand voulez-vous obtenir les valeurs?
À partir de votre code, vous pouvez appeler:
HttpContextBase context = new HttpContextWrapper(HttpContext.Current);
RouteData rd = RouteTable.Routes.GetRouteData(context);
if (rd != null) {
string controllerName = rd.GetRequiredString("controller");
string actionName = rd.GetRequiredString("action");
}
S'il vous plaît noter que cela ne fonctionne que dans le code de votre application. Il n'y a certainement aucun moyen d'obtenir cette information sur les autres sites et les applications.
0
Vous pouvez obtenir le nom du contrôleur et le nom de l'action en ajoutant la méthode Application_BeginRequest dans votre fichier Global.asaxcs.
Voici un exemple:
protected void Application_BeginRequest(object sender, EventArgs args)
{
HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
UrlHelper urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
RouteData routeData = urlHelper.RouteCollection.GetRouteData(currentContext);
string url = currentContext.Request.Url.AbsoluteUri;
string httpMethod = currentContext.Request.HttpMethod;
string action = routeData.Values["action"] as string;
string controller = routeData.Values["controller"] as string;
if (!string.IsNullOrEmpty(controller) && !string.IsNullOrEmpty(action))
{
Logger.Log(controller, action, url, httpMethod);
}
}
Je suppose que je ferais mieux de demander - pourquoi ne voulez-vous savoir? prendre une décision basée sur les noms des contrôleurs/actions/routes-valeurs va vous rendre le code moins lâchement couplé. – belugabob