如何在OnActionExecuting中获取参数?

问题描述 投票:12回答:4

我稍微修改了默认路由规则,如下所示:

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

然后我可以将url设置为:

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

默认操作索引为:

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

我可以使参数发挥作用。但是我想在OnActionExecuting中获得参数。我该怎么办?

asp.net-mvc
4个回答
26
投票
您应该可以使用:进行访问

public override void OnActionExecuting(ActionExecutingContext filterContext) { string id = filterContext.RouteData.Values["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"

它也应该在多个参数上起作用。     

0
投票
我使用以下代码来检索和比较传递给操作(.net core 3.1)的参数。

var vals = filterContext.ActionArguments.Values; var fistobj = vals.FirstOrDefault(); var val = fistobj.GetType().GetProperties().FirstOrDefault(x => string.Equals(x.Name, "nameParameter", StringComparison.OrdinalIgnoreCase)).GetValue(fistobj); if (val == null || val.ToString() != "value parameter") { filterContext.Result = new JsonResult(ExecuteResult.Fail(JanException.Parameter.API00001)); //base.OnActionExecuting(filterContext); return; }

OnActionExecuting和自定义属性InitializingActionAttribute的更多详细信息

public override void OnActionExecuting(ActionExecutingContext filterContext) { ControllerActionDescriptor controlActionDescriptor = (ControllerActionDescriptor)filterContext.ActionDescriptor; var attributes = controlActionDescriptor.MethodInfo.CustomAttributes; if (attributes.Any(a => a.AttributeType == typeof(InitializingActionAttribute))) { var vals = filterContext.ActionArguments.Values; var fistobj = vals.FirstOrDefault(); var val = fistobj.GetType().GetProperties().FirstOrDefault(x => string.Equals(x.Name, "nameParameter", StringComparison.OrdinalIgnoreCase)).GetValue(fistobj); if (val == null || val.ToString() != "value parameter") { filterContext.Result = new JsonResult(ExecuteResult.Fail(JanException.Parameter.API00001)); //base.OnActionExecuting(filterContext); return; } } base.OnActionExecuting(filterContext); }


-5
投票
从filterContext中,您应该能够获得所需的任何东西。

public class MyAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { //Do your stuff here } } [MyAttribute] public ActionResult Index(string id) { //.... }

© www.soinside.com 2019 - 2024. All rights reserved.