2013-04-26 2 views
0

Я успешно зарегистрировался на сайте MVC 4 Web API и получил. ASPXAUTH Set-Cookie таким образом:WebAPI и аутентификация форм CookieContainer

private void Login() 
    { 
     var client = new RestClient("http://QQQQ/MobileAPI"); 
     client.CookieContainer = new CookieContainer(); 
     var request = new RestRequest {Resource = "/api/account/Logon", Method = Method.POST}; 
     request.AddObject(new {Username = "john", Password = "secret"}); 

     var responseLogin = client.Execute(request); 
     if (responseLogin.StatusCode == HttpStatusCode.OK) 
      ProcessData(client.CookieContainer); 
    } 

Как вы можете видеть, что я передать CookieContainer функции ProcessData() в то обработать RESTful команду, которая сидит позади [AUTHORIZE] контроллера.

ProcessData() вызов завершается с HttpStatusCode.Unauthorized

Вопрос: Я полагаю, я не отправлять аутентификацию правильно?

private void ProcessData(CookieContainer cookieJar) 
    { 
     var client = new RestClient("QQQQQ/MobileAPI"); 
     client.CookieContainer = cookieJar; 
     var request = new RestRequest {Resource = "/api/values/5", Method = Method.GET}; 

     var responseForUser = client.ExecuteAsGet<AppUser>(request, "GET"); 

     if (responseForUser.StatusCode == HttpStatusCode.OK) 
     { 
      AppUser app = responseForUser.Data; 
      Console.WriteLine(app.CUSAName); 
     } 

     if (responseForUser.StatusCode == HttpStatusCode.Unauthorized) 
     { 
      Console.WriteLine("FAILED"); 
     } 
    } 
+0

Ваш второй вызов отправляет файл cookie или нет? – leastprivilege

+0

API-контроллер работает иначе, чем Http-контроллер, я сомневаюсь, что атрибут Authorize работает с API-контроллером. Вам нужно будет проверить жизненный цикл контроллера API. –

ответ

0

Оказывается, я просто должен был восстановить сервер с IISRESET. Возможно, это было в плохом состоянии.

Как только я это сделал, приведенный выше код работал совершенно на Android-устройстве.

Смежные вопросы