【问题标题】:Best way to keep user configuration in Web API 2?在 Web API 2 中保留用户配置的最佳方法?
【发布时间】:2018-09-01 03:48:12
【问题描述】:

我正在开发一个使用 Web API 2 的项目,并试图找到将用户配置保存在内存中的最佳方法。

每个用户都有一个特定的配置(时区、位置、语言、其公司信息以及更多信息),所以我试图实现一种在首次登录时查询这些信息并将其保存到内存或其他东西的方法。所以这些信息经常被许多操作使用,我不想在每次需要时都查询所有这些信息来降低应用程序的性能。

所以,第一个计划是使用这些信息实现一个静态类,但我不知道这是否是最好的方法。

有人可以建议在 Web API 2 上实现此功能的最佳方法吗?

【问题讨论】:

  • 如果你的服务是 RESTful 的(根据 rest 标签),添加服务器端会话状态会破坏它。
  • 您可以使用HttpContext.Current.Cache。例如。见this answer
  • 可以使用redis缓存
  • 内存托管在这种情况下会有所帮助:strathweb.com/2012/06/…
  • 根据数据量,您可能会发现基于声明的身份验证是合适的。数据将被编码在一个令牌中,该令牌是每个 API 请求的一部分。

标签: c# asp.net rest web-services authentication


【解决方案1】:

您可以将所有附加信息存储在声明标识中。

【讨论】:

    【解决方案2】:

    您可以在会话中添加信息:

    尝试: 在 Global.asax 中,您必须添加以下代码:

    protected void Application_PostAuthorizeRequest()
    {
        System.Web.HttpContext.Current.SetSessionStateBehavior(System.Web.SessionState.SessionStateBehavior.Required);
    }
    

    现在,您可以在控制器或类中使用 Session:

    var session = System.Web.HttpContext.Current.Session;
    session["token"] = "abc";
    

    变量 session 将在应用程序中持续存在并获取 session

    var abc = session["token"].ToString();
    

    参考: How to keep alive a variable among a class inherit from ApiController and other one inherit from ExceptionFilterAttribute

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多