在ExceptionFilter中访问dbcontext

时间:2018-06-20 12:53:57

标签: c# asp.net-core

我已经编写了一个ExceptionFilter属性,因为我需要访问dbContext类来处理数据库事务。但是我在过滤器属性中收到了null参考。

有什么方法可以获取dbContext的有效参考信息?

    public class AppExceptionAttribute : ExceptionFilterAttribute
    {
        AppIdentityDbContext _context;
        public AppExceptionAttribute(AppIdentityDbContext context)
        {
            _context = context;
        }

        public AppExceptionAttribute()
        { }

        public override async Task OnExceptionAsync(ExceptionContext context)
        {

            var exception = context.Exception;
            while (exception != null)
            {
    //here _context is null, that is a dbContext class
                _context.Errors.Add(new Entities.Error {
                    Message = exception.Message,
                    StackTrace = exception.StackTrace,
                    Date = DateTime.Now
                });

                exception = exception.InnerException;
            }
            await _context.SaveChangesAsync();
        }
    }

我需要提到的是asp.net核心应用程序

1 个答案:

答案 0 :(得分:2)

您可以从IServiceProvider访问ExceptionContext

public override async Task OnExceptionAsync(ExceptionContext context)
{
    var db = context.HttpContext.RequestServices.GetService<AppIdentityDbContext>();

    ...

    await db.SaveChangesAsync();
}