【问题标题】:ActionExecutingContext - ActionParameters vs RouteDataActionExecutingContext - ActionParameters 与 RouteData
【发布时间】:2012-10-21 14:51:27
【问题描述】:

给定以下代码:

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 有什么区别?

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

【问题讨论】:

  • 当你需要他时,@DarinDimitrov 在哪里。 :)

标签: .net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing action-filter


【解决方案1】:

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

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 上的值,由路由表处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 2016-08-06
    相关资源
    最近更新 更多