0

Я буду вставлять журналы из обработчика исключений, и у меня есть действие для почтовых журналов. Как я могу правильно вызвать свое действие?WebApi 2 Действие вызова из пользовательского класса в том же проекте

Создает экземпляр каждый раз правильно?

public class CustomExceptionHandler : ExceptionFilterAttribute 
{ 
    public override void OnException(HttpActionExecutedContext actionExecutedContext) 
    { 
     var exceptionModel = new System_Logs() { Date = DateTime.Now, Request = actionExecutedContext.Request.RequestUri.AbsoluteUri, Response = actionExecutedContext.Response.Content.ToString()}; 
     System_LogsController controller = new System_LogsController(); 
     controller.PostSystem_Logs(exceptionModel); 
     base.OnException(actionExecutedContext); 
    } 
} 

ответ

1

Вы должны создать класс службы ведения журнала (не класс контроллера), который будет обрабатывать ведение журнала. Если вы используете инъекцию зависимостей, для пользовательских атрибутов фильтра используйте свойство впрыска с помощью аннотации/декоратора [Dependency] к свойству. Эта служба регистрации будет инициализирована через контейнер для инъекций. Вы можете искать в SO для IoC (например, Unity, autofac, ninject и т. Д.), Чтобы помочь вам начать работу. Это стоит знать об этих принципах ввода IoC и зависимости, поскольку они могут применяться как на стороне сервера, так и на стороне клиента (разработка javascript).

Подробнее о том, что у вас есть. Ваш код, указанный выше, будет выглядеть примерно так:

public class CustomExceptionHandler : ExceptionFilterAttribute 
{ 
    [Dependency] 
    public ILoggingService LoggingService { get; set; } 

    public override void OnException(HttpActionExecutedContext actionExecutedContext) 
    { 
     var exceptionModel = new System_Logs() { Date = DateTime.Now, Request = actionExecutedContext.Request.RequestUri.AbsoluteUri, Response = actionExecutedContext.Response.Content.ToString()}; 
     LoggingService.PostSystemLogs(exceptionModel); 
     base.OnException(actionExecutedContext); 
    } 
}