2009-07-23 6 views
8

je modifie la route par défaut règle un peu comme ci-dessous:Comment obtenir le paramètre dans OnActionExecuting?

routes.MapRoute(
    "Default",            // Route name 
    "{controller}/{action}/{id}",       // URL with parameters 
    new { controller = "Home", action = "Index", id= (string)null } // Parameter defaults 
); 

Ensuite, je peux définir l'URL comme:

/Controller/Action/myParam 
/Home/Index/MyParam 

L'indice d'action par défaut serait:

public ActionResult Index(string id) 
{ 
    //.... 
} 

I peut obtenir le param en action. Mais je veux obtenir le param dans OnActionExecuting. Comment puis-je le faire?

Répondre

18

Vous devriez être en mesure d'y accéder avec:

public override void OnActionExecuting(ActionExecutingContext filterContext) { 
    string id = filterContext.RouteData.Values["id"]; 
    //... 
} 
+5

Ceci est également exposé via la propriété ActionExecutingContext.ActionParameters. La propriété ActionParameters vous permet de voir ou de modifier les paramètres qui seront réellement transmis à la méthode d'action. – Levi

+0

@Levi vous devriez publier ceci comme réponse –

-4

De votre filterContext vous devriez être en mesure d'obtenir tout ce que vous avez besoin.


public class MyAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //Do your stuff here 
    } 
} 

[MyAttribute] 
public ActionResult Index(string id) 
{ 
    //.... 
} 
0

si vous voulez obtenir le contrôleur, l'action, et tous les paramètres, vous pouvez le faire

var valuesStr = new StringBuilder(); 
    if (ctx.RouteData != null && ctx.RouteData.Values != null) 
     foreach (var v in ctx.RouteData.Values) 
      valuesStr.AppendFormat("/{0}", v.Value); 
    _logger.Info("executing {0}", valuesStr.ToString()); 
    which results in the whole path 

résultats avec:

"/Get/Customer/215840" 

il devrait fonctionner sur plusieurs paramètres aussi bien .

Questions connexes