Подтвердить что ты не робот

ActionExecutingContext - ActionParameters vs RouteData

С учетом следующего кода:

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?

Когда мы должны использовать параметры действия над данными маршрута? В чем разница?

4b9b3361

Ответ 1

Когда вы используете ActionParameters на OnActionExecuting, вы можете изменить значения, отправляемые на стороне клиента для обработки вашего действия, для образца:

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

        base.OnActionExecuting(filterContext);
    }
}

Если у вас есть действие с использованием параметра customerId, вы получите значение, установленное в фильтре действия, так как ваше действие имеет фильтр, для образца:

Когда вы запрашиваете какой-либо URL-адрес: /customer/detail/123, вы получите значение 852 на CustomerId:

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

   return View();
}

RouteData примерно соответствует значениям на URL-адресе, обрабатывая таблицы маршрутов.