给出以下代码:

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var a = filterContext.ActionParameters["someKey"];
        var b = filterContext.RouteData.Values["someKey"];
        base.OnActionExecuting(filterContext);
    }
}


ab有什么区别?

我们何时应该在路线数据上使用动作参数?有什么区别?

最佳答案

ActionParameters上使用OnActionExecuting时,可以在示例操作之前更改客户端发送的值:

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

        base.OnActionExecuting(filterContext);
    }
}


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

当您请求如下网址:/customer/detail/123时,您将在CustomerId上获得852值:

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

   return View();
}


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

关于asp.net-mvc - ActionExecutingContext-ActionParameters与RouteData,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13169937/

10-11 19:17