ASP.NET MVC3中的审核/日志
本文关键字:日志 NET MVC3 ASP | 更新日期: 2023-09-27 18:26:58
我们需要记录MVC 3项目中的特定操作。数据库表将存储日志,类似于:
"用户[SessionUserHere…]更改了[姓名][姓氏][其他属性Here…]值"
我需要了解模型的哪些属性发生了变化,哪些属性保持了原来的值。是否有任何方法可以跟踪模型的哪些属性发生了更改?
在进行审计跟踪的MVC3中,提出了一个数据库触发器;但是我们在这个项目中使用了Sql Server Compact。
谢谢。。。
您看过INotifyPropertyChanged接口吗?
http://msdn.microsoft.com/en-us/library/ms743695.aspx
您可以在代码中而不是在数据库中进行审计。在HttpPost处理程序中,获取原始值并使用审计函数比较对象。我有一个自制的实现,但这做了类似的事情Compare.NET对象。
这意味着您可以执行以下操作:
var original = GetDatabaseRecord(xx);
var newRec = GetFormSubmission(); // However you do this
var auditor = new CompareObjects();
if ( auditor.Compare(original, newRec) )
{
foreach ( var diff in auditor.Differences )
{
// work through the deltas
}
}
else
{
// Nothing changed!
}
我自己的版本返回一个结构:
- 名称(如"问题优先级")
- 更改(ChangedValue、OnlyLeft、OnlyRight)
- 旧价值
- 新价值
所提供的链接可能足以满足您的需求,或者可以作为起点。
我创建了一个库来完成这项工作,并提供了一些额外的元数据。它依赖MVC ModelMetadata
和DataAnnotations
为非技术用户提供diff的"可读版本"。
https://github.com/paultyng/ObjectDiff
给定的对象(显然没有元数据):
var before = new
{
Property1 = "",
MultilineText = "abc'ndef'nghi",
ChildObject = new { ChildProperty = 7 },
List = new string[] { "a", "b" }
};
var after = new
{
Property1 = (string)null,
MultilineText = "123'n456",
NotPreviouslyExisting = "abc",
ChildObject = new { ChildProperty = 6 },
List = new string[] { "b", "c" }
};
它会输出类似于:
ChildObject - ChildProperty: '6', was '7'
List - [2, added]: 'c', was not present
List - [removed]: No value present, was 'a'
MultilineText:
-----
123
456
-----
was
-----
abc
def
ghi
-----
NotPreviouslyExisting: 'abc', was not present