Bir URL'nin geçerli olup olmadığını veya çalışıp çalışmadığını sınamak için bir C# konsol uygulaması geliştiriyorum. Çoğu URL için iyi çalışır ve hedef web sitesinden HTTP Durum Kodu ile yanıt alabilirsiniz. Ancak, diğer bazı URL'leri test ederken, HttpClient.SendAsync yöntemini çalıştırırken uygulama "İstek gönderilirken bir hata oluştu" özel durumu oluşturur. Bu yüzden, herhangi bir yanıt alamıyorum veya HTTP Durum Kodu, bu URL aslında tarayıcıda çalışır. Bu davayı nasıl ele alacağımı öğrenmek için çaresizim. URL çalışmıyorsa veya sunucu isteğimi reddediyorsa, en azından bana karşılık gelen HTTP Durum kodunu vermelidir. Eğer InnerException
bakarsakC# HttpClient.SendAsync atıyor "Bazı URL'leri test ederken istisna istek gönderilirken bir hata oluştu"
using System;
using System.Net.Http;
using System.Threading.Tasks;
namespace TestUrl
{
class Program
{
static void Main(string[] args)
{
// var urlTester = new UrlTester("http://www.sitename.com/wordpress"); // works well and get 404
// var urlTester = new UrlTester("http://www.fc.edu/"); // Throw exception and the URL doesn't work
var urlTester = new UrlTester("http://www.ntu.edu.tw/english/"); // Throw exception and the URL works actually
Console.WriteLine("Test is started");
Task.WhenAll(urlTester.RunTestAsync());
Console.WriteLine("Test is stoped");
Console.ReadKey();
}
public class UrlTester
{
private HttpClient _httpClient;
private string _url;
public UrlTester(string url)
{
_httpClient = new HttpClient();
_url = url;
}
public async Task RunTestAsync()
{
var httpRequestMsg = new HttpRequestMessage(HttpMethod.Head, _url);
try
{
using (var response = await _httpClient.SendAsync(httpRequestMsg, HttpCompletionOption.ResponseHeadersRead))
{
Console.WriteLine("Response: {0}", response.StatusCode);
}
}
catch (Exception e)
{
}
}
}
}
}
Genel olarak, 'Task.WhenAll' beklenilmesi gereken bir bekleyişi geri getirecektir. Engelleme sürümünü istiyorsa, 'Task.WaitAll' kullanması gereken şeydir. –
Düzenlemeyi tamamladığımda bunu yazdınız :) –
Teşekkür ederiz @TamirVered ve Yuval Itzchakov istisnanın ayrıntılarını bulmamda ve kodumu geliştirmeme yardımcı oluyor. Şimdi soru, bu DNS düzeyi sorunu olduğunda bu URL'nin çalışıp çalışmadığını nasıl anlayabilirim. Çoğu durumda, URL aslında çalışır. Test edilen URL bölümüne bakın, bu davayı yeni ekledim. – raycode