从自定义属性访问[FromBody]

时间:2018-12-01 03:16:03

标签: asp.net-core

我有一个asp.net核心MVC应用程序。 我想创建一个“自定义日志”属性来跟踪服务器发生的所有信息。特别是对于带有[HttpPost]和[FromBody]

的用户

例如:

    [AuditLog]
    public async Task<JsonResult> SignIn([FromBody] SignInModel model)

在AuditLog内,我想访问[FromBody]模型实例。 这可能吗?

1 个答案:

答案 0 :(得分:0)

否,在调用(action)方法时,属性无法访问参数。

相反,您可以创建一个动作过滤器。在此过滤器中,您可以访问传递的signInModel值,还可以检查[AuditLog]属性的存在。

类似这样的东西:

public void OnActionExecuting(ActionExecutingContext context)
{
  var parameters = context.ActionDescriptor.Parameters;
  foreach (ControllerParameterDescriptor p in parameters) {
    var attributes = p.ParameterInfo.CustomAttributes;
    if (
      attributes.Any(a => a.AttributeType == typeof(FromBodyAttribute))
    ) {
      var yourModelValue = context.ActionArguments[p.Name];
      // DO SOMETHING HERE...
      break;
    }
  }
}