[C#/COMMON] WebClient 클래스 : 넥서스 저장소(Nexus Repository)에서 자산(Asset) 정보 구하기
C#/Common 2021. 4. 10. 02:40728x90
728x170
▶ Checksum.cs
using Newtonsoft.Json;
namespace TestProject
{
/// <summary>
/// 체크썸
/// </summary>
public class Checksum
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region MD5 - MD5
/// <summary>
/// MD5
/// </summary>
[JsonProperty("md5")]
public string MD5 { get; set; }
#endregion
#region SHA1 - SHA1
/// <summary>
/// SHA1
/// </summary>
[JsonProperty("sha1")]
public string SHA1 { get; set; }
#endregion
#region SHA256 - SHA256
/// <summary>
/// SHA256
/// </summary>
[JsonProperty("sha256")]
public string SHA256 { get; set; }
#endregion
#region SHA512 - SHA512
/// <summary>
/// SHA512
/// </summary>
[JsonProperty("sha512")]
public string SHA512 { get; set; }
#endregion
}
}
728x90
▶ Item.cs
using Newtonsoft.Json;
namespace TestProject
{
/// <summary>
/// 항목
/// </summary>
public class Item
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region ID - ID
/// <summary>
/// ID
/// </summary>
[JsonProperty("id")]
public string ID { get; set; }
#endregion
#region 저장소 - Repository
/// <summary>
/// 저장소
/// </summary>
[JsonProperty("repository")]
public string Repository { get; set; }
#endregion
#region 경로 - Path
/// <summary>
/// 경로
/// </summary>
[JsonProperty("path")]
public string Path { get; set; }
#endregion
#region 포맷 - Format
/// <summary>
/// 포맷
/// </summary>
[JsonProperty("format")]
public string Format { get; set; }
#endregion
#region 다운로드 URL - DownloadURL
/// <summary>
/// 다운로드 URL
/// </summary>
[JsonProperty("downloadUrl")]
public string DownloadURL { get; set; }
#endregion
#region 체크썸 - Checksum
/// <summary>
/// 체크썸
/// </summary>
[JsonProperty("checksum")]
public Checksum Checksum { get; set; }
#endregion
}
}
300x250
▶ AssetData.cs
using System.Collections.Generic;
using Newtonsoft.Json;
namespace TestProject
{
/// <summary>
/// 자산 데이터
/// </summary>
public class AssetData
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Public
#region 항목 리스트 - ItemList
/// <summary>
/// 항목 리스트
/// </summary>
[JsonProperty("items")]
public IList<Item> ItemList { get; set; }
#endregion
#region 연속 토큰 - ContinuationToken
/// <summary>
/// 연속 토큰
/// </summary>
[JsonProperty("continuationToken")]
public string ContinuationToken { get; set; }
#endregion
}
}
▶ NexusHelper.cs
using System.Collections.Generic;
using System.Net;
using Newtonsoft.Json;
namespace TestProject
{
/// <summary>
/// 넥서스 헬퍼
/// </summary>
public static class NexusHelper
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Property
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 사용자 ID - UserID
/// <summary>
/// 사용자 ID
/// </summary>
public static string UserID { get; set; }
#endregion
#region 패스워드 - Password
/// <summary>
/// 패스워드
/// </summary>
public static string Password { get; set; }
#endregion
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Public
#region 항목 리스트 구하기 - GetItemList(serverURL, repositoryName)
/// <summary>
/// 항목 리스트 구하기
/// </summary>
/// <param name="serverURL">서버 URL</param>
/// <param name="repositoryName">저장소명</param>
/// <returns>항목 리스트</returns>
public static List<Item> GetItemList(string serverURL, string repositoryName)
{
using(WebClient client = new WebClient())
{
client.Credentials = new NetworkCredential(UserID, Password);
List<Item> list = new List<Item>();
string url = $"{serverURL}/service/rest/v1/assets?repository={repositoryName}";
while(true)
{
string json = client.DownloadString(url);
AssetData data = JsonConvert.DeserializeObject<AssetData>(json);
foreach(Item item in data.ItemList)
{
list.Add(item);
}
if(string.IsNullOrEmpty(data.ContinuationToken))
{
break;
}
else
{
url = $"{serverURL}/service/rest/v1/assets?repository={repositoryName}&continuationToken={data.ContinuationToken}";
}
}
return list;
}
}
#endregion
}
}
▶ Program.cs
using System;
using System.Collections.Generic;
namespace TestProject
{
/// <summary>
/// 프로그램
/// </summary>
class Program
{
//////////////////////////////////////////////////////////////////////////////////////////////////// Method
////////////////////////////////////////////////////////////////////////////////////////// Static
//////////////////////////////////////////////////////////////////////////////// Private
#region 프로그램 시작하기 - Main()
/// <summary>
/// 프로그램 시작하기
/// </summary>
private static void Main()
{
NexusHelper.UserID = "userID";
NexusHelper.Password = "password";
List<Item> itemList = NexusHelper.GetItemList("http://127.0.0.1", "arca-raw");
foreach(Item item in itemList)
{
Console.WriteLine($"{item.ID} : {item.Path}");
}
}
#endregion
}
}
728x90
그리드형(광고전용)
'C# > Common' 카테고리의 다른 글
[C#/COMMON] ManagementObject 클래스 : 윈도우즈 서비스 파일 경로 구하기 (0) | 2021.04.15 |
---|---|
[C#/COMMON] 최소화된 UWP 앱을 일반 상태로 표시하기 (0) | 2021.04.15 |
[C#/COMMON] 화면 보호기 표시하기 (0) | 2021.04.15 |
[C#/COMMON] Process 클래스 : 윈도우 핸들을 갖고 프로세스 파일 경로 구하기 (0) | 2021.04.14 |
[C#/COMMON] Process 클래스 : 관리자 권한 실행 여부 구하기 (0) | 2021.04.14 |
[C#/COMMON] Mutex 클래스 : 전역 객체 사용하기 (0) | 2021.04.10 |
[C#/COMMON] ManagementObjectSearcher 클래스 : 프로세스 정보 구하기 (0) | 2021.04.10 |
[C#/COMMON] Process 클래스 : Modules 속성을 사용해 프로세스 모듈 정보 구하기 (0) | 2021.04.10 |
[C#/COMMON] Process 클래스 : Threads 속성을 사용해 프로세스 스레드 정보 구하기 (0) | 2021.04.10 |
[C#/COMMON] Process 클래스 : GetProcessById 정적 메소드를 사용해 전경 프로세스 구하기 (0) | 2021.04.07 |