Я использую службу WebAPI в своем веб-приложении. В этой службе используется для всех функций учетной записи (/api/account/login,/api/account/logout,...). Внутри того же веб-рота у меня есть веб-сайт, который использует эту службу webAPI для связи с бэкэнд-системой. Поэтому из моего кода на С# я вызываю функцию IsLoggedIn в моем WebAPI, которая возвращает 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.
Пожалуйста помоги :)
Он всегда будет ложным, поскольку REST является апатридом, каждый запрос ничего не знает о предыдущих запросах.
Вы можете включить Session State, выполнив что-то вроде этого http://www.strathweb.com/2012/11/adding-session-support-to-asp-net-web-api/
Лучшим подходом было бы заставить ваш входной вызов вернуть токен, который затем передается при последующих вызовах для идентификации пользователя. Вот пример: Как использовать пример OAuth 2 - OAuth 2 С#