【问题标题】:Keep state between webapi calls在 webapi 调用之间保持状态
【发布时间】:2014-06-20 01:53:21
【问题描述】:

我只需要在会话中通过 web-api 向用户发送一次信息,我以前在 asmx 中通过在会话中存储一个变量来完成。

在 web-api 中我不能使用会话,我该怎么做?

【问题讨论】:

    标签: session asp.net-web-api


    【解决方案1】:

    开始是评论,但最后太长了...

    ASP.NET Web API 主要用于创建 HTTP 服务,正如 Microsoft 所声称的,ASP.NET Web API 是在 .NET Framework 上构建 RESTful 应用程序的理想平台。此类服务是无状态的,因此您尝试做的是技术上违背了一个非常基本的设计目标。话虽如此,事情并不像看起来那么明确,关于 REST 服务是否应该是无状态的或在某种程度上允许状态存在一些(几乎是宗教性的)争论。

    以下 SO 问题可能会为您提供一些帮助和/或指导来实现您想要的目标:

    此外,以下 StrathWeb 文章提供了一些额外的建议(带有代码示例)和其他信息来源的链接:

    在我目前正在进行的一个项目中,我必须为基于令牌的用户身份验证存储一些状态信息,并且由于我可以访问数据库,因此我使用一个表来存储我需要的信息。从技术上讲,当然对于某些人来说,我违反了规则。但这对我有用,归根结底,你有工作要做,而且你可能并不总是有时间 100% 正确地做事,所以你的方法必须务实。

    【讨论】:

    • 我知道 webapi 是用于 RESTful 服务的,因此不必处理会话......但是当您必须确保在同一会话期间不会发送两次相同的数据时,好吧,你必须在某处保持状态;最后我使用了会话。但也许有更好的方法来实现这一点?
    • StrathWeb 的最后一个链接有一个关于如何启用类似于 MVC 的会话支持的代码示例,因此您绝对应该研究它。或者,如果您有权访问数据库,您可以添加一个“会话”表并记录针对用户的会话,其中可能包含到期日期/时间以及您需要在会话中保留的其他内容。最后,如果您不关心服务器重新启动之间的持久性,您可以使用应用程序范围的集合对象来执行此操作,尽管如果您有数千个会话,这不是一个好主意,因为整个事情需要大量内存.
    • 我的评论不清楚,我在我的网络服务中启用了会话。如果唯一的解决方案是将数据保存在专用表中,我肯定会使用会话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多