2010-01-31 7 views
3

Je souhaite récupérer des valeurs de route à partir de RouteTable, mais il est nul. quelqu'un peut-il aider?Récupérer les valeurs de route à partir de RouteTable

public static class GetRouteValues 
{ 
    public static string GetSomeValue() 
    { 
     RouteCollection routes = RouteTable.Routes; 
     var value = routes["somevalue"].ToString(); 
     return value; 
    } 
} 

Je souhaite récupérer cette valeur pour l'utiliser dans le fichier global.asax et la définir comme valeur par défaut pour certaines routes.

string value = GetRouteValues.GetSomeValue(); 
routes.MapRoute(null, 
         "{_value}/home", 
         new 
         { 
          _value = value, 
          controller = "home", 
          action = "index" 
         }); 
+0

Qu'est-ce 'GetSomeValue()' censé faire/retour? –

+0

Essayez-vous d'extraire l'une des valeurs de l'itinéraire dans le contexte actuel ou tentez-vous d'extraire l'une des routes définies globalement? – anthonyv

+0

@Jorn: Cette méthode rétrograde la valeur de chaîne qui devrait être récupérée à partir des routes ///// @anthonyv: oui, j'essaie de tirer de la route dans le contexte actuel. – Sadegh

Répondre

3

Ok si vous essayez d'obtenir l'itinéraire actuel, vous pouvez le faire à partir d'un contrôleur ....

var completeRoute = this.ControllerContext.RouteData.Route; 
//or 
var justValue = this.ControllerContext.RouteData.Values["value"] 

Laissez-moi savoir si c'est ce que vous recherchez ...

MISE À JOUR:

OK Je pense que cela devrait faire ce que vous recherchez. Vous devriez pouvoir utiliser ceci dans une méthode statique sans passer dans un objet de contexte.

var httpContext = new HttpContextWrapper(HttpContext.Current); 
var requestContext = new RequestContext(httpContext, new RouteData()); 
var completeRoute = requestContext.RouteData.Route; 
var justValue = requestContext.RouteData.Values["value"]; 

Espérons que ça aide.

+0

Je ne veux pas obtenir les valeurs de route actuelles dans le contrôleur, je veux obtenir cela de classe simple. S'il vous plaît voir les codes sur ma question. valeur doit être récupérée par la méthode GetSomeValue. – Sadegh

+0

merci cher anthonyv – Sadegh

+0

Comment obtenir ces valeurs dans global.asax? – Biki

1

J'ai utilisé la réponse d'anthonyv pour ma classe statique mais les résultats étaient nuls. Ce qui suit a fonctionné pour moi (similaire à la façon d'accéder aux objets Session dans une classe statique).

var controller = HttpContext.Current.Request.RequestContext.RouteData.Values["controller"]; 
var action = HttpContext.Current.Request.RequestContext.RouteData.Values["action"]; 
+0

Comment obtenir ces valeurs dans global.asax? – Biki

+0

Ce post revient à la vie après 6 ans! – JoshYates1980

0

mondial serait bien, mais jusqu'à présent, je ne l'ai vu dans le contrôleur:

Namespace Controllers 
    Public Class HomeController 
    Inherits BaseController 
     Dim routeValues = System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values 
     Dim actionName As String 
     Dim controllerName As String 

     Public Function Index(id As String) As ActionResult 
     Try 
      Dim x As Integer = 0 
      Dim y As Integer = 5 
      Dim z As Integer = y/x 
     Catch ex As Exception 
      If routeValues IsNot Nothing Then 
       If routeValues.ContainsKey("action") Then 
        actionName = routeValues("action").ToString() 
       End If 
       If routeValues.ContainsKey("controller") Then 
        controllerName = routeValues("controller").ToString() 
       End If 
      End If 

      Log.LogError(ex, controllerName, actionName) 
     End Try 
Questions connexes