2009-07-23 634 views
8

我修改默认路由规则有点如下:如何在OnActionExecuting中获取参数?

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

然后我可以设置网址为:

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

的默认操作指数将是:

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

我可以得到参数的行动。但我想在OnActionExecuting中获取参数。我该怎么做?

回答

18

你应该能够访问它:

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

这也通过ActionExecutingContext.ActionParameters属性公开。 ActionParameters属性允许您查看或更改将实际传递给操作方法的参数。 – Levi 2009-07-23 17:58:24

-4

从你filterContext你应该能够得到任何你所需要的。


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

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

,如果你想获得控制器,动作,和所有的参数,你可以做到这一点

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 

结果与:

"/Get/Customer/215840" 

应该多参数工作一样好。