在Filter属性中获取控制器,操作,参数

时间:2015-05-08 06:49:41

标签: c# asp.net-web-api2 asp.net-web-api-routing

我想构建一个自定义过滤器属性,该属性将添加到控制器级别。如何获取当前正在调用的当前控制器,操作和参数名称?

示例:如果我发出POST请求:https://localhost:443/api/users/delete/3

我怎样才能进入我的属性(我不是在谈论url解析)

  • controller = users
  • action = delete
  • id = 3

1 个答案:

答案 0 :(得分:2)

@Kamo为第一部分提供了重复的问题,对于ID,请使用.ActionArguments,例如:

 public override void OnActionExecuting(HttpActionContext actionContext)
 {
     var id = (int)actionContext.ActionArguments["id"];

ActionArguments是一个字典,因此如果arg是可选的,或者您正在为所有操作编写通用处理程序(例如,使用其参数/参数记录每个操作),您可以使用linq进行迭代。

这是框架提供的,在绑定之后,因此将匹配Action的参数 - 如果绑定与动作不匹配,那么即使在控制器级别应用,您的filterabbtribute也不会启动。您无法使用此功能查找您的路线与您的行为不匹配的原因。