C# DevOps描述字段图像下载/保存文件
由于我们已经转移到Dev-Ops,我的应用程序无法下载存储在工作项中的任何字段中的图像 我有一个已经通过正则表达式从描述文件中删除的图像URL 如果我将此链接粘贴到浏览器中,它将返回图像(因此url有效) 问题是,在下载图像的调用中,我们没有任何身份验证凭据,它试图将我返回到登录页面 我在我的应用程序中使用dev ops服务器进行身份验证,它会缓存这些内容C# DevOps描述字段图像下载/保存文件,c#,image,tfs,azure-devops,azure-devops-rest-api,C#,Image,Tfs,Azure Devops,Azure Devops Rest Api,由于我们已经转移到Dev-Ops,我的应用程序无法下载存储在工作项中的任何字段中的图像 我有一个已经通过正则表达式从描述文件中删除的图像URL 如果我将此链接粘贴到浏览器中,它将返回图像(因此url有效) 问题是,在下载图像的调用中,我们没有任何身份验证凭据,它试图将我返回到登录页面 我在我的应用程序中使用dev ops服务器进行身份验证,它会缓存这些内容 readonly VssCredentials creds = new VssClientCredentials(); 我已尝试使用网络客
readonly VssCredentials creds = new VssClientCredentials();
我已尝试使用网络客户端拨打电话,但您无法将VSScredentuals强制转换为system.net凭据
这以前是有用的
using (WebClient webClient = new WebClient())
{
byte[] data = webClient.DownloadData(src);
using (MemoryStream mem = new MemoryStream(data))
{
using (var yourImage = Image.FromStream(mem))
{
// If you want it as Png
yourImage.Save(@"c:\temp\path_to_your_file.png", ImageFormat.Png);
// If you want it as Jpeg
yourImage.Save(@"c:\temp\path_to_your_file.jpg", ImageFormat.Jpeg);
}
}
}
我也尝试过使用
using (var client = new TfvcHttpClient(new Uri(src), creds))
{
var itemRequestData = Create(src);
}
private static TfvcItemRequestData Create(string folderPath)
{
return new TfvcItemRequestData
{
IncludeContentMetadata = true,
IncludeLinks = true,
ItemDescriptors =
new[]
{
new TfvcItemDescriptor
{
Path = folderPath,
RecursionLevel = VersionControlRecursionType.Full
}
}
};
}
但是,接下来如何将itemRequestData写入文件
还是我走错了方向
谢谢试试这个:
using (WebClient webClient = new WebClient())
{
webClient.Headers.Add("Authorization", "Basic " + base64Token);
byte[] data = webClient.DownloadData(src);
// ....
}
其中,base64Token是您的个人访问令牌,在开始时使用“:”转换为base64
例如,如果您的令牌是abcdefg,您需要将:abcdefg转换为base64,并将其用作授权令牌。嗨,艾伦,我没有看到您将凭据传递到常规网络客户端,可能只是您粘贴的内容,但您应该在客户端创建时传递凭据,或者在调用下载之前将其作为属性传递。您也可以尝试使用当前用户凭据进行下载,如果他有权访问TFS,则常规webclient下载应该可以正常工作。这就是我遇到的问题,我的应用程序确实在VssCredentials对象中保存了TFS服务器的凭据。web客户端代码是旧方法。但是,当尝试解决此问题时,webclient对象将不接受VssCredentials对象作为参数。那么,如何将其强制转换为system.net凭据对象??我们都可以访问TFS服务器,如果身份验证过期,我们会被要求在应用程序启动时进行身份验证(在VssCredentials中)。目前,当我尝试使用webclient对象时,没有使用系统(IE)缓存凭据。我可以知道您使用的是哪个tfs版本吗?如果方便的话,你能给我们分享一个简单的样本(删除个人信息并用xxx替换PAT)来重现这个问题吗。我们希望在我们这边进行测试,以便更好地解决此问题。@AlanRampton请尝试使用Credentials属性查看此处: