尝试在我的WebAPI系统中构建一些额外的日志记录。使用IIS请求的生命周期信息,我已经能够使用Global.asax.cs中的Application_BeginRequest和Application_EndRequest来记录代码。
然而,请求中的操作(即:数据库活动)发生在我想要记录的ApiControllers中。
在BeginRequest中,我能够访问HttpContext.Items以存储要在EndRequest中检索的信息。但是,这似乎在ApiController中不可用。
我尝试使用Request.Headers对象来执行此操作。但我想因为一个是HttpRequest而另一个是HttpRequestMessage,它们不共享一个共同的内存位置。
我想在Global中使集合对象静态化,并以这种方式存储信息。但由于它是静态的,不允许在请求之间进行交叉授粉吗?
**编辑:试过这个并确认,静态数据在请求之间共享
可以使用外部数据存储来执行此操作,但似乎应该能够在IIS中完成此操作。任何方向都会受到赞赏。
答案 0 :(得分:1)
我不知道为什么我之前没有想到这一点,但我刚刚在Request标题中添加了一个条目,因为它可以在任何地方使用。
所以在我的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());
}