如何使用C#代码从teamcity 8.1.2下载工件

时间:2014-10-16 13:16:53

标签: c# http download teamcity teamcity-8.0

使用C#代码我想从teamcity下载工件(zip文件)。

基于TC文档(https://confluence.jetbrains.com/display/TCD8/Accessing+Server+by+HTTP和),我编写了这段代码

string artifactSource = @"http://testuser:testpassword@teamcity.mydomain/httpAuth/downloadArtifacts.html?buildTypeId=ExampleBuildType&buildId=lastSuccessful";
using(WebClient teamcity = new WebClient())
{
  teamcity.DownloadFile(artifactSource, @"D:\Downloads\1.zip");
}

在Visual Studio中,我得到了: System.dll中出现未处理的“System.Net.WebException”类型异常 附加信息:远程服务器返回错误:(401)未经授权。

当我在浏览器中键入url时,我得到了正确的响应(文件已准备好下载)。我做错了什么?我应该以不同的方式进行授权吗?

1 个答案:

答案 0 :(得分:3)

以下代码实现了您所描述的内容:

var artifactSource = @"http://teamcity.mydomain/httpAuth/downloadArtifacts.html?buildTypeId=ExampleBuildType&buildId=lastSuccessful";

using (var teamcityRequest = new WebClient { Credentials = new NetworkCredential("username", "password") })
{
    teamcityRequest.DownloadFile(artifactSource, @"D:\Downloads\1.zip");
}

如您所见,我已取出用户名和密码,并将其传递给WebClient的Credentials属性。

如果您在TeamCity中启用了访客帐户(我在公司工作),我还建议您考虑访客身份验证。这允许您根本不使用任何凭据。在这种情况下,您需要更改" httpAuth"在" guestAuth"的网址中并且代码变为

var artifactSource = @"http://teamcity.mydomain/guestAuth/downloadArtifacts.html?buildTypeId=ExampleBuildType&buildId=lastSuccessful";

using (var teamcityRequest = new WebClient())
{
    teamcityRequest.DownloadFile(artifactSource, @"D:\Downloads\1.zip");
}

我希望这会有所帮助。