jQuery вызов webAPI WebSecurity.IsAuthenticated всегда ложно

0

Я использую службу 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.

Пожалуйста помоги :)

Теги:
asp.net-web-api

1 ответ

2
Лучший ответ

Он всегда будет ложным, поскольку REST является апатридом, каждый запрос ничего не знает о предыдущих запросах.

Вы можете включить Session State, выполнив что-то вроде этого http://www.strathweb.com/2012/11/adding-session-support-to-asp-net-web-api/

Лучшим подходом было бы заставить ваш входной вызов вернуть токен, который затем передается при последующих вызовах для идентификации пользователя. Вот пример: Как использовать пример OAuth 2 - OAuth 2 С#

  • 0
    Тем не менее это странно .. код на стороне сервера подключается к той же службе через HttpClient.GetAsync (). Это тоже должно быть без гражданства, верно? Но когда я использую эту функцию, я получаю положительный ответ на WebSecurity.IsAuthenticated. Когда я делаю то же самое, используя jQuery, я получаю отрицательный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню