401 Несанкционированный по ВТОРОМУ вызову HttpClient / HttpWebRequest

1

У меня есть приложение, которое использует API REST SharePoint 2010. В процессе создания элемента выполняется несколько запросов друг за другом:

1 Call: Получение элементов из списка: Succes

2 Call: Create Item: 401 Unauthorized

Это то же самое, если я делаю это так:

1 Call: Create Item: Succes

2 Вызов: Удалить Элемент: 401 Несанкционированный

Я знаю, что мои функции работают отдельно, они НЕ работают, когда вызываются друг за другом. Когда я закрываю приложение (приложение Windows Phone 8.1) после создания элемента, и при повторном запуске попробуйте удалить элемент, который он работает.

Сначала я подумал, что это связано с тем, как я обрабатываю свои поля, поэтому я заменил их на NULL в окончательном заявлении, но это не сработало.

    public async Task<bool> CreateNewItem(NewItem myNewItem)
    {   
        try
        {
            StatusBar statusBar = await MyStatusBar.ShowStatusBar("Creating new List Item.");
            //Retrieving Settings from Saved file
            mySettings = await MyCredentials.GetMySettings();
            myCred = new NetworkCredential(mySettings.UserName, mySettings.Password, mySettings.Domain);

            using (var handler = new HttpClientHandler { Credentials = myCred })
            {
                HttpClient client = new HttpClient(handler);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                NewItem newItem = myNewItem;
                var jsonObject = JsonConvert.SerializeObject(newItem);

                HttpResponseMessage response = await client.PostAsync(new Uri(baseUrl + listNameHourRegistration), new StringContent(jsonObject.ToString(), Encoding.Unicode, "application/json"));
                response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                response.EnsureSuccessStatusCode();

                string responseMessage = await response.Content.ReadAsStringAsync();

                client.Dispose();

                if (responseMessage.Length > 0)
                     return true;
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message);
            return false;
        }
        finally
        {
            request = null;
            response = null;
            myCred = null;
            mySettings = null;
        }

        return false;
    }
Теги:
httpclient
httpwebrequest

3 ответа

2

Просто столкнетесь с той же проблемой.

Во всяком случае, второй запрос не соответствует той же процедуре аутентификации. Даже если вы инициализируете новый объект HttpClient. Я понюхал HTTP-трафик. Изображение 174551

После первого запроса я делаю другой с разными учетными данными. Это также заканчивается 401. Я действительно смущен...

Кажется, рукопожатие NTLM завершается на 2 из 6 шагов http://www.innovation.ch/personal/ronald/ntlm.html

Изменить: вы можете использовать CSOM. http://social.msdn.microsoft.com/Forums/office/en-US/efd12f11-cdb3-4b28-a9e0-32bfab71a419/windows-phone-81-sdk-for-sharepoint-csom?forum=sharepointdevelopment

  • 0
    Спасибо за ответ, теперь я знаю, что я не единственный. Я создал вопрос о MSDN тоже может быть , кто - то может помочь нам MSDN сообщений
  • 0
    Ужасно .... возиться с CredentialCache. Но пока не заработало.
Показать ещё 2 комментария
1

Хотя я до сих пор не знаю, какова фактическая проблема, по крайней мере я нашел обходное решение: используйте класс WebRequest вместо HttpClient.

  • 0
    Я только что видел, как вы разместили это в моей теме. Я пришел к тому же ответу, хотя я использовал HttpWebRequest
  • 0
    Да, я использовал WebRequest.CreateHttp, который создает HttpWebRequest. ;)
-1

Я вижу, что этот вопрос давно отправлен. Но я не вижу правильного рабочего решения, размещенного еще в этой теме.

Я столкнулся с той же проблемой, когда следующие запросы продолжали отказываться, возвращая мне 401 UnAuthorized.

Я понял, используя скрипт, что из SECOND запроса было добавлено Cookie, которое, возможно, было результатом ответа Set-Cookie, отправленного сервером вместе с первым ответом.

Итак, вот как я занялся ситуацией - сделайте UseCookies false:

new HttpClientHandler { Credentials = myCred, UseCookies = false }

Это должно решить вашу проблему. Надеюсь, это поможет кому-то, кто ищет решение подобной проблемы.

Ещё вопросы

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