我在webapplication中使用WebAPI服务。此服务用于所有帐户功能(/ api / account / login,/ api / account / logout,...)。在同一个webroot中,我有一个网站,它使用这个webAPI服务与后端系统进行通信。所以从我的C#代码我在我的WebAPI中调用IsLoggedIn函数,当我登录时返回true。这很有用。
[HttpGet]
public bool IsLoggedIn()
{
return (WebSecurity.IsAuthenticated);
}
在我的注册中,我添加了以下代码:
context.Routes.MapHttpRoute("Account", "api/account/{action}/{id}", new { Controller = "Account", id = RouteParameter.Optional });
接下来的GlobalConfiguration:
GlobalConfiguration.Configuration.Filters.Add(new ExceptionHandlingAttribute());
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
自定义ExceptionHandlingAttribute检查抛出的异常是否属于特定类型并返回自定义ReasonPhrase,因此没有什么特别的。
当我登录并从javascript(jQuery)或Fiddler调用函数时,IsLoggedIn函数返回false。我应该在jQuery调用中添加什么来确保仍然可以在WebAPI中找到合适的用户?这种情况发生在POST和GET调用中。
请帮助:)
答案 0 :(得分:2)
由于REST是无状态的,因此总是错误的,每个请求都不知道以前的请求。
您可以通过执行此类操作来启用会话状态 http://www.strathweb.com/2012/11/adding-session-support-to-asp-net-web-api/
更好的方法是让您的Login调用返回一个令牌,然后在后续调用中传递该令牌以识别用户。这是一个例子: How to use OAuth 2 - OAuth 2 C# example