ASP.NET MVC4 Web API 和会话变量



在我的asp.net mvc4项目中,我使用ApiControllers为web客户端和移动客户端提供服务。为了保护web服务,我使用了[authorization]注释。到目前为止,web客户端工作正常。然而,当我倾向于从移动应用程序(例如Android)调用一些Web API时,我得到了一个错误。当我回头看代码片段:

   [Authorize]
    public List<double> GetSomeInfo(int param1, string param2)
        {
           User user = SessionData.CurrentUser;
           // do something using user.UserId
           // ....
        }

会话数据只在用户连接到Web应用程序时才保留用户连接属性。但在移动客户端情况下,会话数据为空。那么,有没有合适的方法来解决这个问题呢?在我看来,我认为userId应该作为任何可能需要它来完成某些处理的Web API的参数提供。你觉得呢?

你说的是两件不同的事情:

    <
  • 会话/strong>

正如Darrel所说,Web Api并不是为支持Asp.net Session而设计的。HTTP和Rest服务是无状态的——因此,每个HTTP请求本身应该携带足够的信息,以便其接收方能够处理它,从而与HTTP的无状态特性完全一致。因此,不要依赖会话变量,而是在请求中添加更多参数。当然,有一种方法可以在Web Api中使用会话,我建议你使用它。

  • 认证

因为只使用参数(如UserId, AccountId,…)不是很安全,所以必须使用Authentication and Authorization。我强烈建议您阅读asp.net web api网站中的安全部分。Web Api支持多种身份验证(Basic, OAuth, Windows, Custom,…)。你必须选择对你最好的。

Web API不是为支持会话而设计的,因为它们是HTTP反模式。您可以通过访问Thread获取当前经过身份验证的用户。

最新更新