Как использовать контейнер cookie с сеансами RestSharp и ASP.NET? - PullRequest
13 голосов
/ 11 января 2012

Я хотел бы иметь возможность вызвать действие аутентификации на контроллере и, если оно выполнено успешно, сохранить данные аутентифицированного пользователя в сеансе.

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

Как я могу обеспечить, чтобы RestClient в RestSharp отправлял все будущие запросы с правильно настроенным файлом cookie, чтобы внутри вызовов служб переменная сеанса могла быть восстановлена ​​правильно?

Я просматривал контейнер cookie с помощью HttpFactory, но, похоже, нигде нет документации по этому вопросу.

Ответы [ 2 ]

31 голосов
/ 13 мая 2012

Если у кого-то возникла подобная проблема, обратите внимание, что вышеприведенное не совсем необходимо для простой задачи «хранить мои куки после каждого запроса». Подход Jaffas, описанный выше, работает, но вы можете просто прикрепить CookieStore к вашему RestClient и сохранить cookie-файлы автоматически . Я знаю, что это решение не для всех, поскольку вы можете хранить только выделенные файлы cookie. С другой стороны, это облегчает вам тестирование REST-клиента! (Я использовал переменные Jaffas для простоты):

        CookieContainer _cookieJar = new CookieContainer();
        var client = new RestClient("http://<test-server>/letteron"); //test URL
        client.CookieContainer = _cookieJar;
7 голосов
/ 25 января 2012

Я решил это в конце.В основном создайте контейнер cookie, затем добавьте cookie сеанса из ответа в контейнер cookie.Все последующие запросы будут содержать этот файл cookie.

 var sessionCookie = response.Cookies.SingleOrDefault(x => x.Name == "ASP.NET_SessionId");
 if (sessionCookie != null)
 {
    _cookieJar.Add(new Cookie(sessionCookie.Name, sessionCookie.Value, sessionCookie.Path, sessionCookie.Domain));
 }
...