티스토리 뷰

WPF .NET

Url 유효성 체크

kaki104 2023. 5. 22. 10:00
반응형

여러 이미지의 url을 이용해서 Image 컨트롤에 출력하는 화면을 개발했습니다.

그런데, url이 유효하지 않은 녀석들이 있더군요

이미지의 url 유효성 검사를 하는 방법에 대해서 찾아보다가, 비교적 쉬운 방법이 있어서 적용을 해보았습니다.

1. Url 존재 여부 확인

_httpClient는 생성자에서 생성했습니다.

전체 소스는 Github를 참고하시면 됩니다.

/// <summary>
/// Url 존재 여부 확인
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public async Task<bool> CheckUrlExistAsync(string url)
{
    if (string.IsNullOrEmpty(url))
    {
        throw new ArgumentNullException($"url is required");
    }
    try
    {
        //자동 dispose를 위해서 using 사용, head 값만 반환하는 요청 생성
        using HttpRequestMessage request = new(HttpMethod.Head, url);
        //httpclient는 1개만 만들어서 계속 사용하는 것이 권장됨
        using HttpResponseMessage response = await _httpClient.SendAsync(request);
        return response.EnsureSuccessStatusCode().IsSuccessStatusCode;
    }
    catch (Exception)
    {
        return false;
    }
}

2. Task.WhenAll을 이용해서 다량의 url 확인

/// <summary>
/// 존재여부 확인
/// </summary>
private async void OnCheck()
{
    //CheckUrlExistAsync를 호출하는 다량의 Task 생성
    var tasks = Urls.Select(u => CheckUrlExistAsync(u.Url)).ToList();
    //모든 Task가 완료 될 때까지 await, _httpClient 1개는 한번에 4-5개의 SendAsync를 처리 합니다.
    var resuls = await Task.WhenAll(tasks);
    //모든 Task가 완료되면, 결과를 입력
    for (int i = 0; i < resuls.Count(); i++)
    {
        Urls[i].Exist = resuls[i];
    }
}

3. 실행

Check 버튼을 클릭해서 Url 체크를 실행합니다.

제일 아래 아이템의 url은 제가 일부러 jpg글씨를 j로 변경했습니다.

4. 소스

WpfTest/CheckUrlSample at master · kaki104/WpfTest · GitHub

 

GitHub - kaki104/WpfTest

Contribute to kaki104/WpfTest development by creating an account on GitHub.

github.com

 

반응형
댓글