Я пытаюсь сохранить изменения в моей БД на созданном мной фильтре, который наследует ActionFilterAttribute
.По сути, фильтр представляет собой базовый журнал API, который регистрирует все запросы, сделанные к моему API.Написано в .NET Core 2.2.
Я получаю следующую ошибку:
SqlException: поток протокола входящего потока табличных данных (TDS) неверен.Поток неожиданно завершился.
Этот только встречается на этом фильтре, а не на любом из моих контроллеров, использующих контекст БД.
Я регистрируюотфильтруйте в моем Startup.cs
следующим образом:
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<AthenaContext>(opts => opts.UseSqlServer(Configuration["ConnectionString:AthenaDB"]));
services.AddScoped<LogFilter>();
services.AddMvc();
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info {Title = "Athena API", Version = "v1"}); });
}
И затем украсьте класс API с помощью: [ServiceFilter(typeof(LogFilter))]
Фактический фильтр (для краткости я удалил часть ненужного кода):
public class LogFilter : ActionFilterAttribute
{
public readonly AthenaContext _db;
public LogFilter(AthenaContext context)
{
_db = context;
}
public override void OnActionExecuting(ActionExecutingContext context)
{
........
//Log the request
_db.ApiLogs.Add(new ApiLog
{
EndPoint = $"{controllerName}/{actionName}",
RequestHeader = requestHeader,
RequestBody = requestBody,
IpAddress = ipAddress
});
//Save the DB changes
_db.SaveChanges();
//Execute the base request
base.OnActionExecuting(context);
}