Dot-Net

ActionExecutingContext - ActionParameters 與 RouteData

  • August 13, 2020

給定以下程式碼:

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 上,由路由表處理。

引用自:https://stackoverflow.com/questions/13169937