2

在我的 asp.net mvc4 项目中,我使用 ApiControllers 为 Web 客户端和移动客户端提供服务。为了保护 Web 服务,我使用了 [Authorize] 注释。所以现在,网络客户端工作正常。但是,当我倾向于从移动应用程序(例如 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。你怎么看 ?

4

2 回答 2

1

你在谈论两件不同的事情:

  • 会议

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

  • 验证

Because working with only paramaters ( such as UserId, AccountId, ...) is not very secure, you have to use Authentication and Authorization. I highly suggest you to read the security section in asp.net web api web site. Web Api support many authentications (Basic, OAuth, Windows, Custom, ...). You have to choose what is the best for you.

于 2013-05-17T14:00:45.387 回答
0

Web API 并非旨在支持会话,因为它们是 HTTP 反模式。如果您已设置必要的身份验证机制,则可以通过访问 Thread.CurrentPrincipal 来获取当前经过身份验证的用户。

于 2013-04-09T16:29:52.840 回答