2017-01-17 4 views
0

Есть ли способ обновить содержимое файла в проекте на вашей учетной записи службы визуальной студии с использованием HTTP-глаголов, аналогично тому, как это делается здесь с github https://developer.github.com/v3/repos/contents/#update-a-file.Обновление файла с помощью REST Api Visual Studio Team Services

var json={ 
     "comment": "Update scripts.json", 
     "changes": [{ 
      "changeType": 2, 
      "item": { 
       "path": "$/ExtensionsTest/scripts.json", 
       "contentMetadata": { "encoding": 65001 }, 
       "version": 47 
      }, 
      "newContent": { 
       "content": "[ {\"hello\" : \"Test\"} ]", 
       "contentType":"RawText" 
      } 
     }] 
    }; 
    $.ajax({ 
     type: 'POST', 
     url: 'https://xxxxx.visualstudio.com/_apis/tfvc/changesets?api-version=3.0-preview.2', 
     contentType: 'application/json', 
     data: JSON.stringify(json), 
     cache: false, 
     dataType: "json", 
     beforeSend: function (xhr) { 
        xhr.setRequestHeader("Authorization", "Basic " + btoa("my UserName" + ":" + "my PW")); 
     } 
    }).done(function (data) { 
     console.log(data); 
    }); 
}; 

Код, который я использую, и я получаю с ним ошибку 400. Любые предложения о том, что я делаю неправильно.

+0

Что такое код детали? Попробуйте выполнить проверку через инструмент POSTMAN (Chrome), чтобы проверить запрос. С другой стороны, вы можете попытаться захватить запросы через инструмент разработчика (https://msdn.microsoft.com/en-us/library/gg130952(v=vs.85).aspx) (открыть веб-доступ> код, обновить и сохраняйте файлы и запросы на захват.) –

+0

Когда я проверяю запрос с помощью инструмента dev, пытаясь отправить POST на URL-адрес, на который вы ссылаетесь на шаге 2, используя TFVC, я получаю статус 400. Я не уверен, как воспроизвести вызов, используя postman. Я просто использую ajax с типом: «POST», url: (шаг 2 url), данные: (что у вас есть в данных JSON, но с моим контентом и файловым контуром, заголовком : Авторизация и contentType: application/json есть что-то мне не хватает –

+0

Какова информация о запросе, который вы захватили с помощью инструмента dev? Какова деталь данных JSON? Укажите здесь код детали. –

ответ

1

Попробуйте эти способы:

Если вы используете ГИТ:

  1. Получить фиксации ID значения: метод запроса: GET; URL [url]/[название проекта команды]/_ apis/git/repositories/[имя репозитория] /commits?api-version=1.0 & branch = master & $ top = 1
  2. Обновление содержимого файла: Метод запроса: Сообщение ; URL: [collection url]/[название проекта команды]/_ apis/git/repositories/[имя репозитория] /pushes?api-version=3.0-preview.2; Тип контента: application/json;

JSON данные:

{ 
    "refUpdates": [{ 
     "name": "refs/heads/master", 
     "oldObjectId": "[step 1 commit ID]" 
    }], 
    "commits": [{ 
     "comment": "Updated BuildLog.cs", 
     "changes": [{ 
      "changeType": 2, 
      "item": {"path": "/BuildLog.cs"}, 
      "newContent": { 
       "content": "using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    public class BuildLog 
    { 
     public int count; 
     public string[] value6; 
    } 
} 
", 
       "contentType": 0 
      } 
     }] 
    }] 
} 

Если вы используете TFVC:

  1. Получить ID набора изменений: метод запроса: GET; URL: [коллекция url]/_ apis/tfvc/changesets? Api-version = 1.0 & $ top = 1
  2. Обновить содержимое файла: Метод запроса: Сообщение; URL: [коллекция url]/_ apis/tfvc/changesets? Api-version = 3.0-preview.2; Тип контента: application/json;

Json данные:

{ 
    "comment": "Updated Class1.cs", 
    "changes": [{ 
     "changeType": 2, 
     "item": { 
      "path": "$/Scrum2015/ClassLibraryB/ClassLibraryB/Class1.cs", 
      "contentMetadata": {"encoding": 65001}, 
      "version": [step changeset id] 
     }, 
     "newContent": { 
      "content": "using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ClassLibraryB 
{ 
    public class Class1 
    { 
     string sgs = \"\"; 
     public void T() 
     { 
      ClassLibraryA.Class1 c = new ClassLibraryA.Class1(); 
      c.TestOther2(); 
     } 
    } 
} 
", 
      "contentType": 0 
     } 
    }] 
} 

Примечание: Вам нужно разобрать кавычки, если содержимое файла содержит кавычки (\»тест \»), то же самое, как и другие специальные чартеры.

С другой стороны, вы можете добиться того, что через VSO-узел-апи, больше информации, вы можете обратиться к этой теме: TFS Rest API check-in to Version Control

Update1:

Обратитесь к этому коду, чтобы изменить ваш код:

var json={ 
        "comment": "Updated tt.json", 
        "changes": [{ 
         "changeType": 2, 
         "item": { 
          "path": "$/Scrum2015/Buildtest/CoreSolutionDemo/WebApplication1/tt.json", 
          "contentMetadata": { "encoding": 65001 }, 
          "version": 754 
         }, 
         "newContent": { 
          "content": "[ {\"hello\" : \"Test2\"} ]", 
          "contentType": "RawText" 
         } 
        }] 
       }; 
       $.ajax({ 
        type: 'POST', 
        url: 'https://XXX.visualstudio.com/_apis/tfvc/changesets?api-version=3.0-preview.2', 
        contentType: 'application/json', 
        data: JSON.stringify(json), 
        cache: false, 
        dataType: 'json', 
        beforeSend: function (xhr) { 
         xhr.setRequestHeader("Authorization", "Basic " + btoa("name" + ":" + "password or PAT")); 
        }, 
       }).done(function (data) { 
        var s1 = "ss"; 

       }).error(function (e) { 
        var s = "ss"; 
       }); 
      }) 
+0

Спасибо за ваш ответ, пока у меня все настроено, но когда я запустил его, я получаю ошибку 400. Я использую TFVC, и я использую ajax ... Я помещаю данные json под данные: в мой вызов ajax. Вы хоть представляете, что я могу делать неправильно. –

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