在我的asp.net mvc4项目中,我正在使用ApiControllers服务于Web客户端和移动客户端。为了保护Web服务的安全,我正在使用[Authorize]批注。
因此,目前,Web客户端运行良好。但是,当我倾向于从移动应用程序(例如Android)调用某些Web API时,出现了错误。
当我回顾一下代码片段时:
[Authorize]
public List<double> GetSomeInfo(int param1, string param2)
{
User user = SessionData.CurrentUser;
// do something using user.UserId
// ....
}
会话数据仅在用户连接到Web App时才保留用户连接的属性。但是对于移动客户端,会话数据为空。因此,有没有适当的方法来解决此问题。
在我看来,我认为应该将userId作为任何可能需要实现某些处理的Web API的参数来提供。
你怎么看 ?
最佳答案
您在谈论两件事:
届会
正如Darrel所说,Web Api并非旨在支持Asp.net Session。 HTTP和Rest Services是无状态的-因此,每个HTTP请求应自身携带足够的信息,以便其接收者进行处理以使其与HTTP的无状态本质完全协调一致。
因此,不要依赖会话变量,而是在请求中添加更多参数。
当然,在Web Api中有一种使用会话的方法,我建议您使用它。
认证方式
因为仅使用参数(例如UserId,AccountId等)不是很安全,所以必须使用身份验证和授权。我强烈建议您阅读ASP.NET Web API网站中的security section。 Web Api支持许多身份验证(基本,OAuth,Windows,自定义等)。您必须选择最适合自己的东西。