给出以下代码:
public class MyActionFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { var a = filterContext.ActionParameters["someKey"]; var b = filterContext.RouteData.Values["someKey"]; base.OnActionExecuting(filterContext); } }
a和b有什么区别?
我们什么时候应该在路由数据上使用动作参数?有什么不同?
解决方法
当您在OnActionExecuting上使用ActionParameters时,可以更改客户端发送的区域值来处理您的操作,例如:
public class MyActionFilter : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { filterContext.ActionParameters["customerId"] = 852; base.OnActionExecuting(filterContext); } }
如果您使用customerId参数执行操作,那么您将获取设置在操作过滤器上的值,因为您的操作具有过滤器,例如:
当您请求这样的URL:/ customer / detail / 123时,您将获得CustomerId上的852值:
[MyAction] public ActionResult Detail(int customerId) { // customerId is 852 return View(); }
RouteData只是关于URL的值,由路由表进行处理.