有没有办法为每个控制器方法添加虚拟方法行为? (即记录)
Is there a way to add a virtual method behaviour for every controller method? (i.e logging)
经过我的研究,我自己对我的问题的回答是:不幸的是,没有。但我也想听听你的意见。
我有 4 个控制器,每个控制器有 5 个方法。每个方法都有一个 try-catch 块。万一出现异常,我想在文件上记录一条包含该控制器所有参数的消息。所以我必须将基本相同的日志指令写 4x5=20 次。如果我想更改日志消息,我必须执行 20 次。一方面,听起来像是一个难以维护的问题。但另一方面,每个控制器都有自己的签名。
是否可以使用一些 base/parent/God 方法来虚拟记录每个控制器?当然,如果我需要 adapt/override 仅针对一个控制器的日志记录指令,这应该也是可能的。有什么技巧吗?
如果我只需要为每个控制器方法生成一个 GUID 怎么样?
有很多方法可以实现可以记录所有控制器方法的单段代码。我想到的最简单的实现是只编写一个执行操作或函数的方法。然后在里面调用 action/function 并将其包装在您希望使用的任何日志记录中。像这样:
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/)。
选项很多!
经过我的研究,我自己对我的问题的回答是:不幸的是,没有。但我也想听听你的意见。
我有 4 个控制器,每个控制器有 5 个方法。每个方法都有一个 try-catch 块。万一出现异常,我想在文件上记录一条包含该控制器所有参数的消息。所以我必须将基本相同的日志指令写 4x5=20 次。如果我想更改日志消息,我必须执行 20 次。一方面,听起来像是一个难以维护的问题。但另一方面,每个控制器都有自己的签名。
是否可以使用一些 base/parent/God 方法来虚拟记录每个控制器?当然,如果我需要 adapt/override 仅针对一个控制器的日志记录指令,这应该也是可能的。有什么技巧吗?
如果我只需要为每个控制器方法生成一个 GUID 怎么样?
有很多方法可以实现可以记录所有控制器方法的单段代码。我想到的最简单的实现是只编写一个执行操作或函数的方法。然后在里面调用 action/function 并将其包装在您希望使用的任何日志记录中。像这样:
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/)。
选项很多!