【问题标题】:Storing data temporarily in an ASP.NET Core application在 ASP.NET Core 应用程序中临时存储数据
【发布时间】:2017-01-05 02:41:17
【问题描述】:

我正在使用单例字典集合来存储用户集合,以便用户可以使用他们的 guid 访问 api 来访问他们的信用卡详细信息。

有没有比使用单例字典集合更安全的方式来存储数据?它仅用于临时存储 - 不涉及数据库。

【问题讨论】:

  • TBH,我认为这种风格不符合 PCI 标准。你是?但是,继续前进,您可以使用带有此“用户数据”的临时 json 文件,然后如果您真的想走那条路或地狱,则可以通过服务访问它们,甚至在该 json“配置”之上应用授权规则......但请不要:-)

标签: c# asp.net-mvc asp.net-core-1.0


【解决方案1】:

我可能会质疑单个 guid 是否是信用卡详细信息王国的钥匙……事实上,我也会质疑在任何情况下通过 API 提供完整的信用卡详细信息。

但让我们假设问题更多的是关于临时存储。

内存存储没问题,但是你会遇到两个问题。

  1. 当您的应用程序重新启动时,缓存“丢失”。
  2. 您将无法水平扩展,因为缓存用于单个应用程序。服务器池中的其他机器将不得不构建自己的缓存(并且您将需要担心粘性会话等其他事情)。

Redis 确实是一个更好的选择。假设您在 Windows 上,您需要下载 redis from here 并安装它。显然,在部署时,您可以使用 Azure Redis 等。对于代码,幸运的是,微软已经为您完成了大部分工作。主要取自这篇文章:http://dotnetcoretutorials.com/2017/01/06/using-redis-cache-net-core/

在您的 .net 核心应用中安装此软件包。

Install-Package Microsoft.Extensions.Caching.Redis

在你的 startup.cs 的配置服务方法中,你需要添加 Redis 作为缓存服务。你这样做:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    services.AddDistributedRedisCache(option =>
    {
        option.Configuration = "127.0.0.1";
        option.InstanceName = "master";
    });
}

然后你可以在你的控制器/服务中请求 IDistributedCache。类似于以下内容:

public class HomeController : Controller
{
    private readonly IDistributedCache _distributedCache;

    public HomeController(IDistributedCache distributedCache)
    {
        _distributedCache = distributedCache;
    }

    [HttpGet]
    public async Task<string> Get()
    {
        //You can access _distributedCache here. 
    }
}

【讨论】:

    【解决方案2】:

    应用程序重新启动时会发生什么?之后你不会丢失数据吗?如果不这样做(您的列表是硬编码的),我认为收集没有问题。但是在每次应用重启后,您会丢失数据并需要重新输入,您可以尝试像https://redis.io/ 一样缓存用户集合。应用程序重新启动后,您不会丢失收集数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多