2009-07-23 25 views
8

modifico la regla de ruta por defecto un poco de la siguiente manera:¿Cómo obtener el parámetro en OnActionExecuting?

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

Entonces puede establecer la dirección URL como:

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

el índice predeterminado acción sería:

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

I puede obtener el param en acción. Pero quiero obtener el parámetro en OnActionExecuting. ¿Cómo puedo hacerlo?

Respuesta

18

Usted debe ser capaz de acceder a él con:

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

Esto también se expone a través de la propiedad ActionExecutingContext.ActionParameters. La propiedad ActionParameters le permite ver o cambiar los parámetros que realmente se pasarán al método de acción. – Levi

+0

@Levi debes publicar esto como respuesta –

-4

Desde su filterContext usted debería ser capaz de conseguir lo que necesita.


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

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

si desea obtener el controlador, la acción, y todos los parámetros, se puede hacer esto

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 

resultados con:

"/Get/Customer/215840" 

que debería funcionar en múltiples parámetros igual de bien .

Cuestiones relacionadas