使用 angular 前端 Web 应用程序在 asp .net 核心中存储每个会话的数据

Storing data per session in asp .net core with angular front end web app

首先我会提到我是 angular 的新手,也是 ASP.NET 的新手。我正在开发一个将 pdf 文档组合成一个 pdf 文档的网络应用程序。该工具是 angular 前端和 ASP.NET 核心后端,它应该同时支持多个浏览器。

我已经获得了一个运行正常的网络应用程序版本,但不支持多种浏览器。它的工作原理如下:

  1. 通过 angular 应用程序提交 pdf 1,该应用程序会将 pdf 发布到 asp.net 后端控制器。后端将pdf存储在服务中(单例服务)。

  2. 通过 angular 应用程序提交 pdf 2,将 pdf 发布到 asp.net 后端控制器,后者将 pdf 存储在服务中

  3. 点击 angular 应用中的 Combine 按钮,它会向后端发送请求,将其拥有的 pdf 合并为 1 个,并且 return 新创建的 pdf 到 angular应用

显然,这里的问题是我使用单例服务为浏览器持久化数据:如果我通过一个浏览器提交pdf1,然后加载另一个浏览器并提交pdf2,加载另一个浏览器并点击合并按钮,它将合并 pdf 1 和 2 - 这显然是不对的!

我一直在研究使用会话数据来存储单个 pdf,但是 运行 遇到了一个问题,即在 SPA 应用程序中使用会话数据是不可取的,而使用网络 api 是代码气味。所以我想知道解决这个问题的正确方法是什么,这样我就可以离开并继续阅读它了!我如何在 angular 具有 asp.net 后端的网络应用程序中 临时 存储每个用户/每个浏览器的数据...

我会远离对 session/users/documents/etc 有任何意识的单身人士,而只是做一些活动;它应该是无状态的。

我猜您是将它们保存在内存中,这就是您在服务中的意思,这也可能会变得棘手。缩放很快就会成为一个问题。

也许对此有技术和 UI 解决方案?您能否将 PDF 保存在数据存储中,然后在单独的视图或页面中选择将数据库中的 PDF 合并?从数据的角度来看,这将是最干净的。

但是,如果您对同一个视图一无所知,并且 view/session 只知道该会话中上传的内容,则您需要使用 J.Salas 提到的某种标识符.我仍然会投票赞成不再将文档存储在内存中,但这里的解决方案不会在意任何一种方式。您可以将存储在 session ID 中的 pdf 标识符放在前面,并且您知道哪个附加到哪个。