【问题标题】:Is there a way to add a virtual method behaviour for every controller method? (i.e logging)有没有办法为每个控制器方法添加虚拟方法行为? (即记录)
【发布时间】:2021-10-13 04:18:49
【问题描述】:

经过我的研究,我自己对我的问题的回答是:很遗憾,没有。但我也想听听你的意见。

我有 4 个控制器,每个控制器有 5 个方法。每个方法都有一个 try-catch 块。万一出现异常,我想在一个文件中记录一条包含该控制器所有参数的消息。所以我必须编写基本相同的日志指令 4x5=20 次。如果我想更改日志消息,我必须执行 20 次。一方面,这听起来像是一个难以维护的问题。但另一方面,每个控制器都有自己的签名。

是否有可能有一些基本/父/上帝方法虚拟记录每个控制器?当然,如果我需要为一个控制器调整/覆盖日志记录指令,这也应该是可能的。有什么技巧吗?

如果我只需要为每个控制器方法生成一个 GUID 怎么样?

【问题讨论】:

    标签: asp.net-mvc asp.net-core logging asp.net-web-api


    【解决方案1】:

    有很多方法可以实现可以记录所有控制器方法的单段代码。我想到的最简单的实现就是编写一个采取行动或功能的方法。然后在内部调用该操作/函数并将其包装在您希望使用的任何日志记录中。像这样:

    public void ExecuteWithLogging(Action actionToExecute)
    {
        try
        {
            action() // the same as action.Invoke()
        }
        catch(Exception e)
        {
            // code your logging here
        }
    }
    

    然后在控制器的方法中,您可以像这样使用它:

    ExecuteWithLogging(() =>
    {
        // your controller code
    });
    

    但还有其他方法。您可能可以使用属性将每个方法标记为已记录。或者,也许您可​​以编写一些只记录所有内容的中间件(可能在本文中 -> https://exceptionnotfound.net/using-middleware-to-log-requests-and-responses-in-asp-net-core/)。

    选择很多!

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 2014-01-04
      • 2011-02-05
      相关资源
      最近更新 更多