【问题标题】:ASP.NET MVC - way to pass data between requestsASP.NET MVC - 在请求之间传递数据的方式
【发布时间】:2016-02-15 00:59:09
【问题描述】:

我有两种方法的控制器。第一种方法应该设置变量并做一些事情。第二种方法(由 ajax 调用)应该得到这个变量的值。所以,我不能使用 TempData 和 Cache (因为有 2 个不同的请求)。如何解决?使用会话?但是在asp.net mvc中默认禁用会话,如果我启用它,我担心整个应用程序会出现意外行为......全局变量也没有被批准(因为我需要为具体用户获取变量的值)

编辑: 工作流程是:

  1. 客户端 jquery 脚本调用 Upload 方法控制器并传递一个巨大的文件。此方法执行时间很长(即 1 分钟,无论如何)。此方法生成文件的唯一名称并将记录添加到数据库(使用此唯一名称)
  2. 用户可以取消上传并点击“取消”。它调用另一个服务器方法(即名为 Cancel),该方法应从数据库中删除记录(由 Upload 方法添加)并删除上传的文件(或该文件的上传部分)。

因此,在 Cancel 方法中,我需要知道正在上传的文件的唯一名称。我必须将此名称存储在任何存储(即 Redis、DB 等)的 Upload 方法中,并在上传成功后从该存储中删除(或在 Cancel 方法中,如果调用了 Cancel)

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    如果数据不敏感,我建议将该值保留在该用户的 cookie 中。

    如果数据是敏感的,您需要存储在例如服务器的缓存中。在那里,您为每个用户保留一个记录,然后在完成处理后重复使用并丢弃它。当您有一个网站实例时,这很有效。如果你不这样做,你应该看看例如 redis 缓存、sql server、azure table storage……

    【讨论】:

    • 我无法使用 cookie。第一种方法无法向客户端返回任何内容(实际上,它正在上传具有取消功能的大文件)
    • 你能更详细地解释一下流程吗?
    • 我在主要问题中添加了详细信息
    • 您可以在上传文件时添加一个令牌。您保留在用户会话或 cookie 中的此令牌。当您想取消上传时,您只需将令牌发送到服务器并让服务器处理它。这里有一个类似的问题可以帮助您编写一些代码stackoverflow.com/questions/7729806/…
    • 我想过。但是客户端控制(b​​lueimp)不是那么灵活,我理解,方法“上传”应该删除文件和数据库中的记录,而不是方法“取消”(因为我们不知道“取消”方法中上传的阶段。它可以在添加记录之前和上传之后,或者在这两个操作之前......)。因此,最好在“取消”方法中设置要删除的标志,但在“上传”方法结束时检查是否设置了标志并删除...
    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2018-07-23
    相关资源
    最近更新 更多