0

我在我的 Web 应用程序中使用 WebAPI 服务。在此服务中用于所有帐户功能(/api/account/login、/api/account/logout、...)。在同一个 webroot 中,我有一个网站,它使用这个 webAPI 服务与后端系统进行通信。因此,从我的 C# 代码中,我在我的 WebAPI 中调用 IsLoggedIn 函数,该函数在我登录时返回 true。这很好用。

[HttpGet]
public bool IsLoggedIn()
{
    return (WebSecurity.IsAuthenticated);
}

在我的 arearegistration 中,我添加了以下代码:

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

请帮忙 :)

4

1 回答 1

2

因为 REST 是无状态的,所以它总是错误的,每个请求对以前的请求一无所知。

您可以通过执行以下操作来启用会话状态 http://www.strathweb.com/2012/11/adding-session-support-to-asp-net-web-api/

更好的方法是让您的登录调用返回一个令牌,然后在后续调用中传递该令牌以识别用户。这是一个示例: 如何使用 OAuth 2 - OAuth 2 C# 示例

于 2013-10-21T15:43:19.930 回答