У меня есть решение с двумя проектами, моим уровнем API и моим уровнем данных.
Уровень данных использует Entity Framework и не знает о ASP.NET WebApi.
Уровень API использует ASP.NET WebApi.
Я планирую использовать Audit.NET для аудита изменений записей.
В настоящее время я установил Audit.NET, Audit.EntityFramework и Audit.WebApiв моем проекте API.
Я хочу использовать атрибут фильтра аудита.(config.Filters.Add(new AuditApiAttribute());
)
Моя проблема заключается в том, что когда я заполняю объект EntityLog, я также хотел бы заполнить поле UserId идентификатором пользователя, выполняющего в настоящее время авторизованное действие, или нулевым, если действиеявляется анонимным.
Как часть моего Startup.cs, я запускаю эту функцию для настройки Audit.NET:
private void ConfigureAudit()
{
Audit.Core.Configuration.Setup()
.UseEntityFramework(x => x
.AuditTypeMapper(t => typeof(AuditLog))
.AuditEntityAction<AuditLog>((ev, entry, entity) =>
{
entity.UserId = ???;
// other fields...
})
.IgnoreMatchedProperties()
);
}
Очевидно, что на данный момент я не могу использовать HttpContext.Current.User.Identity.GetUserId()
, так как яне внутри контроллера, и я не вижу способа передачи UserId в событие Audit.
Как я могу получить UserId на этом этапе?