我有一个asp.net核心MVC应用程序。 我想创建一个“自定义日志”属性来跟踪服务器发生的所有信息。特别是对于带有[HttpPost]和[FromBody]
的用户例如:
[AuditLog]
public async Task<JsonResult> SignIn([FromBody] SignInModel model)
在AuditLog内,我想访问[FromBody]模型实例。 这可能吗?
答案 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;
}
}
}