会话或webAPI中的任何替代方案

时间:2017-01-12 08:04:46

标签: c# asp.net design-patterns asp.net-web-api asp.net-web-api2

我有一个业务逻辑,它具有大量的数据库获取操作和一些复杂的业务逻辑。 提取的数据很少在用户会话中更改。

  • 许多提取操作(在用户的会话中很少更改提取的数据)。
  • 对于表单上的每个操作(按钮单击/文本框中的值更改等...),我们需要运行业务逻辑来检查它是否有效更改。

目前我们正在使用Asp.net Forms Application,这些业务逻辑在InSessionScope()中。 目前,我们正致力于迁移到Restful API(WebAPI)。

  • 我们可以在RESTFul中使用会话(InSessionScope())吗?
  • 如果不在会话中如何避免更多数据库调用并在后续调用中使用相同的对象并提高性能?

2 个答案:

答案 0 :(得分:5)

根据我的个人经验,永远不要在Rest应用程序中使用Session作为AspNET WebAPI ..即使你可以......但是使用令牌进行授权和用户分析(使用AspNet身份)和性能(不要多次击中DB)我建议你采取一些方法:

1 - USE CACHE!! (有一些很棒的框架和lib用于缓存..你可以使用不同的缓存层..查询.. webapi的响应...例如我用来缓存整个API响应(Json)并自动进行调用on POST / PUT / DELETE request)..在.NET中你可以使用这个https://github.com/filipw/Strathweb.CacheOutput 您还可以使用Redis进行缓存(如果您不想在服务器中本地缓存但是要使用分布式缓存)

2 - 尝试以NoSQL方式思考..在我们的应用程序中,我们使用DB .. SQL Server以及MongoDB(特别是对于大量数据)的混合,例如我们使用SQL服务器管理AspNEt身份,但我们使用MongoDB来存储我们的产品(我们有大约6百万的产品),查询需要大约1秒(也有聚合!!)..

3 - 如果您可以存储一些信息,请尝试在LocalStorage上使用FrontEnd。然后在需要时同步它们。

希望它可以帮助你...享受WebAPI ..享受REST !! (并在我的想法中尽快离开网络表格!!)

答案 1 :(得分:0)

您可以使用由您或JwtToken实现的令牌。

如果您选择在登录方法上实现自定义令牌,则必须将令牌返回给您的应用,然后在任何api调用中,将此令牌(如标头或查询字符串)传递给服务器,然后在服务器中解密以验证提议。