2016-10-22 11 views
1

В TFS 2015 Update 3 все работало без проблем. Я использовал все apis, используя пакет npm request без проблем. Использование JQuery следующий вызов также будет всегда правильно заполнить:Ajax вызывает TFS 15 Rest Api перестала работать после обновления

//this used to work in 2015 Update 3 
var request = { 
    url: "https://my_server/tfs/DefaultCollection/_apis/projects?api-version=2.0", 
    type:'GET', 
    contentType: "application/json", 
    accepts: "application/json", 
    dataType: 'json', 
    data: JSON.stringify(data), 
    beforeSend: function (xhr) { 
    xhr.setRequestHeader("Authorization", "Basic " + btoa("my_username:my_password")); 
    } 
}; 

$.ajax(request); 

После обновления до TFS 15 RC2 выше механизм не работает больше. Сервер всегда возвращает ошибку 401 - Unauthorized.

Тестирование же вызов через завиток, все работало хорошо:

//this works well 
curl -u my_username:my_password https://my_server/tfs/DefaultCollectiopis/projects?api-version=2.0 

Но опять-таки не удалось, когда я пытался отправить учетные данные в заголовке, что-то вроде этого:

//this will fail 
curl https://my_server/tfs/DefaultCollection/_apis/projects?api-version=2.0 \ 
    -H "Accept: application/json" \ 
    -H "Authorization: Basic eNjPllEmF1emEuYmFuNppOUlOnVuZGVmaW5lZA==" 

же 401 - Несанкционированная ошибка.

Я пытался настроить мой Личный маркер доступа, так как он входит в TFS 15 RC2, и сделать тест, как указано here

$(document).ready(function() { 
    $.ajax({ 
     url: 'https://my_server/defaultcollection/_apis/projects?api-version=2.0', 
     dataType: 'json', 
     headers: { 
      'Authorization': 'Basic ' + btoa("" + ":" + myPatToken) 
     } 
    }).done(function(results) { 
     console.log(results.value[0].id + " " + results.value[0].name); 
    }); 
}); 

, и это также не удается. Однако, после замены myPatToken для моего действительного пароля и передавая свое имя пользователя, а также, то запрос успешно завершен:

//everything works correctly with the headers like this 
headers: { 
      'Authorization': 'Basic ' + btoa("my_username:my_password") 
     } 

В двух словах, что-то происходит не так, когда я настроить заголовок, как это (с помощью JQuery):

//this fails 
beforeSend: function (xhr) { 
    xhr.setRequestHeader("Authorization", "Basic " + btoa("my_username:my_password")); 
    } 

и выглядит как пакет НПМ request, который является один я использую, вероятно, также использует свойство beforeSend или подобное, и это не удается.

//this used to work with 2015 Update 3, not anymore after upgrading to 15 RC2 
var options = { 
      url: 'https://my_server/defaultcollection/_apis/projects?api-version=2.0', 
      method:'GET', 
      headers: { 
       'Authorization': "Basic " + btoa("my_username:my_password") 
      }, 
      json: data 
     }; 

request(options, (error, response, body) => { 
     if (!error && response.statusCode == 200) { 
      console.log(response); 
     } else { 
      console.log(error); 
     } 
    }); 

Это заставляет меня думать, что это, вероятно, что-то в конфигурации IIS, но базовая аутентификация настроена правильно. Есть ли способ получить эту работу с помощью запроса пакета? Что-то изменилось в конфигурации IIS после обновления?

ответ

-1

Проблемы были решены после перезапуска сервера, поэтому я думаю, что мой случай был изолированной ситуацией, не связанной с TFS.

Теперь отправка запроса с использованием пакета request, похоже, хорошо работает.

Однако, странно, что тестирование его в браузере с использованием jquery все равно не удалось. Я заметил, что

var username = "my_username", 
    password = "my_password"; 
btoa(my_username + ":" + my_password); //generates wrong encoded string 

генерирует другую закодированную строку, то просто

btoa("my_username:my_password") //generates right encoded string 

Право один является несколько символов короче, это пример:

eXVuaWQuYmZGV12lpmaW5lZA== //wrong 
eXVuaWQuYmZGVsbEAxMw==  //correct 

Не знаю, почему, хотя ,