Web API 2:如何声明可以在控制器中访问的每用户全局变量?

时间:2019-12-04 22:56:42

标签: c# asp.net-web-api2

我有Web API 2(MVC)项目。调用任何方法时,都需要X-API-Key标头。 X-API-Key用于区分UAT和PROD /网站和移动应用程序调用。 我有一个消息处理程序,该消息处理程序在调用到达目标方法之前验证X-API-Key并设置每个用户的全局变量,因此在发送任何响应之前,这些变量可用于原始调用中的任何控制器。 主要要求是每个用户的全局变量对于每个用户应该是唯一的,并且不能在方法调用之间共享。 因此,静态变量将不起作用,还尝试使用HttpContext.Current.Cache,它也不起作用。有什么建议吗?

MessageHandlers\APIKeyHandler.cs

SharedLibrary

CustomersController

1 个答案:

答案 0 :(得分:0)

感谢大家的关注。

我相信我找到了想要的东西: HttpContext.Current.Items

“与Session集合不同,您放置在Items集合中的任何内容都只会在单个Web请求期间存在,而Session集合会在每个用户继续发出请求的情况下保留其内容。” >

这是我现在要使用的:

在SharedLibrary方法中设置“每用户全局变量”:

HttpContext.Current.Items.Add("EnableDebugMode", true);

使用SharedLibrary方法获取“每用户全局”变量:

public static bool GetEnableDebugMode()
{
    return HttpContext.Current.Items.Contains("EnableDebugMode") ? (bool)HttpContext.Current.Items["EnableDebugMode"] : false;
}

在CustomersController中使用“全局每用户”变量:

catch (Exception e)
{
    _r.ResponseCode = "002";
    if (UserSession.GetEnableDebugMode())
    {
        _r.ResponseBody = e.InnerException == null ? e.Message : e.Message + "  " + e.InnerException.Message;
    }
    else
    {
        _r.ResponseBody = e.Message;
    }
    return Content(HttpStatusCode.InternalServerError, _r);
}