Промежуточное программное обеспечение является одним из подходов, или вы также можете создать Фильтр, который позволит вам выполнять операции «до» и «после»,
https://www.tutorialsteacher.com/webapi/web-api-filters
[ Код по вышеуказанной ссылке]
public class LogDemoAttribute : Attribute, IActionFilter
{
public LogDemoAttribute()
{
}
public Task<HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
{
Trace.WriteLine(string.Format("Action Method {0} executing at {1}", actionContext.ActionDescriptor.ActionName, DateTime.Now.ToShortDateString()), "Web API Logs");
var result = continuation();
result.Wait();
Trace.WriteLine(string.Format("Action Method {0} executed at {1}", actionContext.ActionDescriptor.ActionName, DateTime.Now.ToShortDateString()), "Web API Logs");
return result;
}
public bool AllowMultiple
{
get { return true; }
}
}
Это позволяет вам добавлять в глобальные фильтры (в этом случае вы также можете использовать промежуточное программное обеспечение) или добавлять его выборочно в определенные конечные точки, например,
[ApiController]
public class PeopleController : ControllerBase
{
[LogDemo]
[HttpGet("demo/endpoint")]
public IActionResult GetAll()
{
}
}
Это имеет то преимущество, что вы можете захотеть передать некоторые параметры атрибуту, что позволит вам выполнять определенные контекстные действия c.
Если вы хотите добавить ведение журнала в не- код контроллера, то вы можете продолжить этот подход к шаблону Aspect Orientated / Decorator.
https://docs.microsoft.com/en-us/archive/msdn-magazine/2014/february/aspect-oriented-programming-aspect-oriented-programming-with-the-realproxy-class
Я обычно нахожу параметры регистрации на уровне контроллера хорошими достаточно, и что-то вроде Application Insights, который генерирует телеметрию, которая показывает вам, как выглядит запрос, на самом деле является полезной информацией.