jQuery web API调用Web Security.IsAuthenticated始终为false

时间:2013-10-21 13:45:35

标签: c# jquery asp.net-web-api

我在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调用中。

请帮助:)

1 个答案:

答案 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