在WebApiApplication&之间传递信息ApiController

时间:2016-06-03 14:19:12

标签: c# asp.net iis asp.net-web-api

尝试在我的WebAPI系统中构建一些额外的日志记录。使用IIS请求的生命周期信息,我已经能够使用Global.asax.cs中的Application_BeginRequest和Application_EndRequest来记录代码。

然而,请求中的操作(即:数据库活动)发生在我想要记录的ApiControllers中。

在BeginRequest中,我能够访问HttpContext.Items以存储要在EndRequest中检索的信息。但是,这似乎在ApiController中不可用。

我尝试使用Request.Headers对象来执行此操作。但我想因为一个是HttpRequest而另一个是HttpRequestMessage,它们不共享一个共同的内存位置。

我想在Global中使集合对象静态化,并以这种方式存储信息。但由于它是静态的,不允许在请求之间进行交叉授粉吗?

**编辑:试过这个并确认,静态数据在请求之间共享

可以使用外部数据存储来执行此操作,但似乎应该能够在IIS中完成此操作。任何方向都会受到赞赏。

1 个答案:

答案 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());
    }