使用 REST Api Visual Studio 团队服务更新文件
Updating a file using REST Api Visual Studio Team Services
有没有什么方法可以使用 HTTP 动词更新您的 visual studio 团队服务帐户中项目中的文件内容,类似于此处使用 github [=13= 完成的方式].
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 错误。关于我做错了什么的任何建议。
试试这些方法:
如果您正在使用 GIT:
- 获取commit ID值:请求方法:GET; URL [集合 url]/[团队项目名称]/_apis/git/repositories/[存储库名称]/commits?api-version=1.0&branch=master&$top=1
- 更新文件内容:请求方式:Post; URL: [集合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:
- 获取变更集ID:请求方式:GET; URL: [集合 url]/_apis/tfvc/changesets?api-version=1.0&$top=1
- 更新文件内容:请求方式:Post; 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
}
}]
}
注意:如果文件内容中包含引号(\”test\”),需要解析引号,其他特殊包机也一样。
另一方面,你可以通过vso-node-api实现,更多信息,你可以参考这个帖子:
更新 1:
参考这段代码修改你的代码:
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";
});
})
有没有什么方法可以使用 HTTP 动词更新您的 visual studio 团队服务帐户中项目中的文件内容,类似于此处使用 github [=13= 完成的方式].
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 错误。关于我做错了什么的任何建议。
试试这些方法:
如果您正在使用 GIT:
- 获取commit ID值:请求方法:GET; URL [集合 url]/[团队项目名称]/_apis/git/repositories/[存储库名称]/commits?api-version=1.0&branch=master&$top=1
- 更新文件内容:请求方式:Post; URL: [集合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:
- 获取变更集ID:请求方式:GET; URL: [集合 url]/_apis/tfvc/changesets?api-version=1.0&$top=1
- 更新文件内容:请求方式:Post; 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
}
}]
}
注意:如果文件内容中包含引号(\”test\”),需要解析引号,其他特殊包机也一样。
另一方面,你可以通过vso-node-api实现,更多信息,你可以参考这个帖子:
更新 1:
参考这段代码修改你的代码:
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";
});
})