给出以下代码:
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
有什么区别?我们何时应该在路线数据上使用动作参数?有什么区别?
最佳答案
在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/