我正在处理的项目需要一些简单的审计日志记录,以便用户更改其电子邮件,帐单地址等.我们正在使用的对象来自不同的来源,一个是WCF服务,另一个是Web服务.
我已经使用反射实现了以下方法来查找对两个不同对象的属性的更改.这将生成一个属性列表,这些属性与旧值和新值有差异.
public static IList GenerateAuditLogMessages(T originalObject, T changedObject)
{
IList list = new List();
string className = string.Concat("[", originalObject.GetType().Name, "] ");
foreach (PropertyInfo property in originalObject.GetType().GetProperties())
{
Type comparable =
property.PropertyType.GetInterface("System.IComparable");
if (comparable != null)
{
string originalPropertyValue =
property.GetValue(originalObject, null) as string;
string newPropertyValue =
property.GetValue(changedObject, null) as string;
if (originalPropertyValue != newPropertyValue)
{
list.Add(string.Concat(className, property.Name,
" changed from '", originalPropertyValue,
"' to '", newPropertyValue, "'"));
}
}
}
return list;
}Run Code Online (Sandbox Code Playgroud)
我正在寻找System.IComparable,因为"所有数字类型(如Int32和Double)都实现IComparable,String,Char和DateTime也是如此." 这似乎是找到任何不是自定义类的属性的最佳方法.
利用由WCF或Web服务代理代码生成的PropertyChanged事件听起来不错,但没有为我的审计日志(旧值和新值)提供足够的信息.
如果有更好的方法来寻找输入,谢谢!
@Aaronaught,这里是一些基于执行object.Equals生成正匹配的示例代码:
Address …Run Code Online (Sandbox Code Playgroud) 我做了很多ASP.NET MVC 2开发,但我正在处理一个小项目,它需要在PHP中完成.
有没有内置的PHP来进行模型绑定,将表单字段映射到类?我的一些PHP代码目前看起来像这样:
class EntryForm
{
public $FirstName = "";
public $LastName = "";
}
$EntryForm = new EntryForm();
if ($_POST && $_POST["Submit"] == "Submit")
{
$EntryForm->FirstName = trim($_POST["FirstName"]);
$EntryForm->LastName = trim($_POST["LastName"]);
}
Run Code Online (Sandbox Code Playgroud)
是否存在内置于典型PHP安装的内容,可以像在ASP.NET MVC中找到的那样进行映射,还是需要额外的框架?
这是情况......
站点1)ASP.NET MVC应用程序,供客户登录,查看和支付账单等.该站点使用无cookie的ASP会话,允许多个会话在选项卡式浏览器中运行.
站点2)具有标准静态内容的公司网站.这将在每个页面的顶部有一个小表单,其中包含将发布到MVC应用程序的用户名/密码表单.
发布到MVC应用程序时,正在生成一个新会话,并且该站点返回302重定向,其中URL中包含会话ID(如预期的那样).控制器有两个Login方法,一个用于处理GET,一个用于处理POST.由于重定向,它击中了GET方法并且它丢失了表单值.
通过更改公司站点上的方法来执行表单GET而不是POST,用户名和密码在重定向后保留在查询字符串中,我可以通过这种方式处理请求,但我宁愿做一个POST而不是通过URL中的数据.
我的直觉说实现某种自定义HttpHandler会允许我这样做,但我不确定我能在哪里与会话创建联系起来.global.asax中Session_Start的断点显示会话ID已经被装箱,并且该点已经发生重定向.