来自同一项目中的自定义 Class 的 WebApi 2 调用操作

WebApi 2 Call Action From Custom Class in Same Project

我将从异常处理程序中插入日志,并且我已对 post 日志执行操作。如何正确调用我的服务操作?

每次创建实例是否正确?

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);
    }
}

您应该创建一个日志记录服务 class(而不是控制器 class)来处理日志记录。如果您正在使用依赖注入,对于自定义过滤器属性使用 属性 注入使用 [Dependency] annotation/decorator 到 属性。该日志记录服务将通过注入容器初始化。您可以在 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);
    }
}