Every once in a while you need to add meta functionality without actually changing the business logic code. This might be reporting telemetry, logging, or adding metrics. While necessary, writing this code along with the business logic feels kind of wrong. There’s no separation of concerns, it makes the business logic harder to read, and it’s prone to bugs. If you’re using ASP.NET Core, you can use attributes and the middleware system to add this kind of logic.