티스토리 뷰
반응형
여러 이미지의 url을 이용해서 Image 컨트롤에 출력하는 화면을 개발했습니다.
그런데, url이 유효하지 않은 녀석들이 있더군요
![](https://t1.daumcdn.net/keditor/emoticon/friends2/large/005.png)
이미지의 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
반응형
'WPF .NET' 카테고리의 다른 글
Kiosk 만들기 - Part0 (0) | 2023.10.13 |
---|---|
CommunityToolkit.Mvvm Login 페이지 추가하고 사용 (0) | 2023.07.24 |
Visual Studio에서 다중 레파지토리 사용하기 (0) | 2023.05.10 |
이미지 사용하기 - WPF Pack URI Part2 (0) | 2023.04.12 |
이미지 사용하기 - WPF Pack URI Part1 (0) | 2023.04.07 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Bot Framework
- #uwp
- UWP
- LINQ
- Microsoft
- Visual Studio 2022
- .net
- uno platform
- PRISM
- MVVM
- visual studio 2019
- Behavior
- IOT
- XAML
- #MVVM
- WPF
- ef core
- kiosk
- dotNETconf
- Always Encrypted
- #Windows Template Studio
- Cross-platform
- C#
- #prism
- Build 2016
- windows 11
- uno-platform
- Windows 10
- .net 5.0
- ComboBox
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
글 보관함