Dot-Net
ActionExecutingContext - ActionParameters 與 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?我們什麼時候應該在路由數據上使用動作參數?有什麼區別?
當您使用
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 上,由路由表處理。