2014-11-12 7 views
0

Я спросил, как настроить вызов службы и получил a great info on HttpClient. Однако, в то время как , что вопрос о техническом ответе, я все еще застреваю.Получение токена для аутентификации

В консоли я вижу, какой запрос мой браузер отправляет службе, чтобы получить токен для авторизации. Однако, когда я пытаюсь имитировать вызов, создающий запрос на моем уровне обслуживания, появляется следующее сообщение об ошибке. Вероятность ошибки me Ошибка здесь довольно крутая. Не уверен, что Google для, действительно ...

«StatusCode: 500, ReasonPhrase: 'Внутренняя ошибка сервера', версия: 1.1, Содержание: System.Net.Http.StreamContent, заголовки: \ u000d \ u000a {\ u000d \ u000a Передача-кодирование: chunked \ u000d \ u000a Связь: keep-alive \ u000d \ u000a Дата: ср, 12 ноября 2014 21:00:34 GMT \ u000d \ u000a Set-Cookie: lang = \ "en \ Max = Age = 31622400; Сервер: (Ubuntu) \ u000d \ u000a Content-Type: текст/равнинный, кодировка = UTF-8 \ u000d \ u000A}»

сам вызов выглядит следующим образом.

using (HttpClient client = new HttpClient()) 
{ 
    Task<HttpResponseMessage> message 
    = client.PostAsync(urlToken, new StringContent(credentials)); 
    message.Wait(); 
    result = message.Result.ToString(); 
} 
+0

500 Ошибка указывает на то, что что-то пошло не так в сервисе. Проверьте журналы веб-сервера и средства просмотра событий, чтобы узнать, что там было зарегистрировано. – Tim

ответ

1

Как было опубликовано в ответе, который вы приняли в своем связанном сообщении, вам необходимо прочитать содержание ответа. Вызов ToString() непосредственно в ответ не показывает вам фактическую ошибку.

Изменить код на что-то вроде:

using (HttpClient client = new HttpClient()) 
{ 
    var response = await client.PostAsync(url, new StringContent(credentials)); 
    result = await response.Content.ReadAsStringAsync(); 
} 

После того, как вы можете увидеть фактическое ответное сообщение от сервера, вы должны быть в состоянии выяснить, что делать дальше.

+0

Я не получаю свойство * Content * от моего intellisense. Кроме того, * wait * требует, чтобы весь метод был асинхронным. Но мне нужно, чтобы он исполнялся «синхронно». Вот почему я иду * message.Wait() *. Я совсем здесь? –

+1

Вы не видите '.Content', потому что это свойство существует в' HttpResponseMessage', а не 'Task'. Вы должны увидеть его на 'message.Result'. Что касается вашего вопроса о том, чтобы быть полностью выключенным, я не могу сказать. Вы представили слишком мало контекста, чтобы знать. Сказав это, как правило, это плохая практика делать то, что вы делаете. См. Сообщение в блоге @ stephencleary [по теме] (http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html). –

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