【问题标题】:Angular Js+Asp.net Web api session managementAngular Js+Asp.net Web api 会话管理
【发布时间】:2015-04-14 09:13:25
【问题描述】:
我是 angular 和 web api 的新手,我以前在 asp.net web 表单和 java jsp 上工作过我的问题是,因为 angular 是纯 js 框架,web api 用于 Http 服务,如果我们构建 web使用这两种技术的应用程序如何处理会话管理,我们可以在 web api 控制器中创建会话吗?如果可以,既然 webapi (REST) 是无状态的,是否违反了 REST 无状态的原则,请澄清
谢谢
【问题讨论】:
标签:
angularjs
asp.net-web-api
single-page-application
javascript-framework
【解决方案1】:
我还没有评论回应他的声誉,但在这种情况下,David Tyron 似乎误解了“无国籍”一词。显然,API 和使用它的 UI 都必须维护和处理可以正确标记为状态的数据,但是在 RESTful API 的上下文中,“无状态”通常是指 API 不跟踪的事实客户的状态。
这背后的想法是,对 API 的每个请求都必须包含所有必要的 UI 信息以执行所需的操作。换句话说,每个调用都必须独立发生并且彼此独立。
会话绝对违反了这一原则,尽管它可能是最常用的阻止某些东西 100% RESTful 的东西。
(在相关说明中,Cookie 仍然算作无状态,因为客户端是负责存储该数据的人。)
【解决方案2】:
Angular 和 WebAPI 不会更改在 Web 应用程序中跟踪会话的方式。通常,这是通过随每个请求发送的 cookie 来完成的。由于 cookie 遵循域,Angular 请求将始终发送 cookie(就像他们以前一样)。
回答您的每个问题:
我们可以在 web api 控制器中创建会话吗?
是的,我们可以通过HttpContext.Current.Session访问会话。
是否违反了 REST 无状态原则?
REST(Representational State Transfer)没有无状态原则。 HTTP 是一种无状态协议。 REST 表示对服务器的调用(使用 HTTP 动词等)应该处理应用程序的状态。