2016-06-03 3 views
1

Попытка создать дополнительную регистрацию в моей системе WebAPI. Используя информацию жизненного цикла для запросов IIS, я смог зарегистрировать код с помощью Application_BeginRequest и Application_EndRequest в Global.asax.cs.Информация о переходе между WebApiApplication и ApiController

Однако есть действия в запросе (то есть: активность базы данных), которые происходят в моих ApiControllers, которые я также хочу регистрировать.

В BeginRequest я могу получить доступ к файлам HttpContext.Items для хранения информации, которую нужно получить в EndRequest. Однако, похоже, это не доступно в ApiController.

Я попытался использовать объект Request.Headers для этого. Но я предполагаю, что, поскольку один из них является HttpRequest, а другой - HttpRequestMessage, они не имеют общего места в памяти.

Я думал создать объект коллекции static в Global и хранить информацию таким образом. Но поскольку он является статичным, не допускает перекрестного опыления между запросами?

** EDIT: попробовал это и подтвердил, статические данные передаются между запросами

Можно использовать внешний хранилищу, чтобы сделать это, но кажется, что это должно быть в состоянии осуществить прямо в IIS. Любое направление будет оценено по достоинству.

ответ

1

Не знаю, почему я об этом не думал раньше, но я только что добавил запись в заголовки запроса, поскольку это доступно во всем мире.

Так что в моем Global.asax.cs:

protected void Application_BeginRequest(object sender, EventArgs e) 
    {    
     // this is avaiable in Global.asax - not ApiControllers 
     Context.Items.Add("request_start_time", DateTime.Now); 
     // this is avaiable everywhere 
     Request.Headers.Add("Request_Key", Guid.NewGuid().ToString()); 
    } 
Смежные вопросы