从自定义属性访问 [FromBody]

Posted

技术标签:

【中文标题】从自定义属性访问 [FromBody]【英文标题】:Access [FromBody] from a Custom Attribute 【发布时间】:2019-05-03 04:41:24 【问题描述】:

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

例如:

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

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

【问题讨论】:

我的回答是否提供了足够的帮助来解决您的问题? 【参考方案1】:

不,在调用 (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;
    
  

【讨论】:

以上是关于从自定义属性访问 [FromBody]的主要内容,如果未能解决你的问题,请参考以下文章

如何从自定义属性中读取维度值?

从自定义类派生的组件属性

从自定义主题继承所需的 XML 属性

如何从自定义用户控件 WPF、C# 中的枚举自定义属性中获取值?

如何从自定义插件设置 Gradle Artifactory Publish 插件默认配置/属性

如何从自定义对话框工具栏属性页中隐藏 CMFCToolBar?