Я хочу, чтобы база данных регистрировала время, необходимое моему приложению для обработки каждого запроса, и некоторую другую информацию, такую как IP-адреса для каждого полученного запроса.
Я добавил приложение. Используйте шаг в Startup.cs-> Сконфигурировать с внедрением зависимости в мой dbcontext.Я не получаю ошибок, когда запускается приведенный ниже код, и мой конвейер MVC, кажется, работает правильно.
Проблема заключается в том, что любые вызовы, которые включают dbcontext, похоже, выходят из кода.В приведенном ниже примере db.PageRequests.Add(pageRequest);
вызывает код для выхода.Страница по-прежнему отображается нормально, но, конечно, отсутствует ответ, добавленный к ответу.
Не могу не подумать, что это проблема асинхронности / многопоточности, но я потерян для идей.Я также попытался сделать взаимодействие dbcontext синхронным и асинхронным, но это не помогло.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ApplicationDbContext db)
{
app.Use(async (context, next) =>
{
var sw = new Stopwatch();
sw.Start();
await next.Invoke();
sw.Stop();
PageRequest pageRequest = new PageRequest()
{
ipAddress = context.Connection.RemoteIpAddress.ToString(),
loadTime = sw.ElapsedMilliseconds
};
db.PageRequests.Add(pageRequest); // this code exits and page is rendered. Code below here is never fired.
db.SaveChanges();
await context.Response.WriteAsync("<p>" + sw.ElapsedMilliseconds.ToString() + "<p>");
await context.Response.WriteAsync("<p>" + context.Connection.RemoteIpAddress + "<p>");
await context.Response.WriteAsync("<p>" + context.Request.Host + context.Request.Path + context.Request.QueryString + "<p>");
});
// other app.use statements here
}