繁体   English   中英

Audit.Net,-即使抛出异常,也需要正确的审核

[英]Audit.Net, - need correct auditing even when exception is thrown

在控制器中执行此方法时:

[Route("deleteIncCloseOut")]
[HttpDelete]
[AuditApi]
public bool deleteIncidentCloseOut(int ID)
{
  try
  {
    using (ESSDataContext ctx = new ESSDataContext())
    {
      ctx.DeleteIncidentCloseOut(ID);
      this.GetCurrentAuditScope().SetCustomField("Dynamic", new { IncidentCloseOutID = ID });
      return true;
    }
  }
  catch (Exception ex)
  {
    log.Error($"{ex.StackTrace}");
    return false;
    throw ex;
  }
}

存储过程DeleteIncidentCloseOut(ID)存在一个异常,因此未设置AuditEvent的CustomField。 但是,DataProvider的InsertEvent仍在执行。

我的问题是在我的InsertEvent中,我必须填充两个表。 一个表简要描述了审核事件,另一个表包含了设置为AuditEvent对象的CustomField的对象的属性和值。 在这种情况下,我将创建一个以ID为属性的动态对象。 因此,我在第一个表中获得一个条目,该事件IncidentCloseOut已被删除(但实际上并没有被删除,因为引发了异常),但是我没有在第二个表中获得所谓的已删除事件的ID。没有设置CustomField)。 所以我得到虚假的审计信息。 最好,存储过程不会抛出异常,但是即使抛出异常,我也希望审计是正确的。

如何纠正/改善这种情况?

只需调用引发异常的存储过程之前设置自定义字段即可:

public bool deleteIncidentCloseOut(int ID)
{
  try
  {
    using (ESSDataContext ctx = new ESSDataContext())
    {
      this.GetCurrentAuditScope().SetCustomField("Dynamic", new { IncidentCloseOutID = ID });
      ctx.DeleteIncidentCloseOut(ID);
      return true;
    }
  }
  catch (Exception ex)
  {
    ...
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM