Tôi đang phát triển ứng dụng bảng điều khiển C# để kiểm tra xem URL có hợp lệ hay không. Nó hoạt động tốt cho hầu hết các URL và có thể nhận phản hồi với Mã trạng thái HTTP từ trang web mục tiêu. Nhưng khi kiểm tra một số URL khác, ứng dụng sẽ ném "Đã xảy ra lỗi khi gửi yêu cầu" ngoại lệ khi chạy phương thức HttpClient.SendAsync. Vì vậy, tôi không thể nhận được bất kỳ phản hồi hoặc Mã trạng thái HTTP nào ngay cả khi URL này thực sự hoạt động trong trình duyệt. Tôi đang tuyệt vọng để tìm hiểu làm thế nào để xử lý trường hợp này. Nếu URL không hoạt động hoặc máy chủ từ chối yêu cầu của tôi, thì ít nhất nó sẽ cung cấp cho tôi mã trạng thái HTTP tương ứng.C# HttpClient.SendAsync ném "Đã xảy ra lỗi khi gửi yêu cầu" ngoại lệ khi kiểm tra một số URL
Dưới đây là mã đơn giản của ứng dụng thử nghiệm của tôi:
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)
{
}
}
}
}
}
Nói chung, 'Tác vụ.WhenAll' sẽ trả về một số chờ đợi cần được chờ đợi. Nếu anh ta muốn phiên bản chặn, 'Task.WaitAll' là những gì anh ta nên sử dụng. –
Bạn đã viết điều này chỉ khi tôi hoàn tất chỉnh sửa :) –
Cảm ơn @TamirVered và Yuval Itzchakov đã giúp tôi tìm ra các chi tiết về ngoại lệ và cải thiện mã của tôi. Bây giờ câu hỏi trở nên như thế nào tôi có thể biết liệu URL này có hoạt động hay không khi vấn đề cấp DNS này xảy ra. Bởi vì trong nhiều trường hợp, URL thực sự hoạt động. Kiểm tra phần URL được thử nghiệm, tôi vừa thêm trường hợp này. – raycode