15

给定以下代码:

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

我们什么时候应该在路由数据上使用动作参数?有什么不同?

4

1 回答 1

21

当您使用ActionParameterson 时OnActionExecuting,您可以在处理操作之前更改客户端发送的值,例如:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.ActionParameters["customerId"] = 852;

        base.OnActionExecuting(filterContext);
    }
}

如果您有使用 customerId 参数的操作,您将获得在操作过滤器上设置的值,因为您的操作具有过滤器,例如:

当您请求任何这样的 url:/customer/detail/123时,您将获得852CustomerId 的值:

[MyAction]
public ActionResult Detail(int customerId)
{
   // customerId is 852

   return View();
}

RouteData只是值在 url 上,由路由表处理。

于 2013-07-03T11:50:17.753 回答