Доступ к [FromBody] из пользовательского атрибута - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть приложение MVC asp.net core.Я хочу создать пользовательский атрибут журнала, чтобы отслеживать всю информацию, произошедшую с сервером.Особенно для тех с [HttpPost] и [FromBody]

Например:

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

Внутри AuditLog я хочу иметь доступ к экземпляру модели [FromBody].Это возможно?

1 Ответ

0 голосов
/ 01 декабря 2018

Нет, ваши атрибуты не могут получить доступ к аргументам во время вызова метода (действия).

Вместо этого вы можете создать фильтр действий.В этом фильтре вы можете получить доступ к переданному значению 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;
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...