Tôi đang cố gắng xác minh sự tồn tại của một Url bằng cách sử dụng HttpWebRequest. Tôi đã tìm thấy một vài ví dụ về cơ bản này:Tại sao HttpWebRequest lại ném một ngoại lệ thay vì trả về HttpStatusCode.NotFound?
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
Tuy nhiên, nếu url thực sự bị hỏng, nó sẽ không trả lời, thay vào đó là ném một ngoại lệ.
tôi sửa đổi mã của tôi như thế này:
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
return response.StatusCode;
}
}
catch (System.Net.WebException ex)
{
var response = ex.Response as HttpWebResponse;
return response == null ? HttpStatusCode.InternalServerError : response.StatusCode;
}
mà dường như cuối cùng đã làm những gì tôi muốn.
Nhưng tôi muốn biết, tại sao yêu cầu lại ném ngoại lệ thay vì trả lại phản hồi bằng mã trạng thái NotFound?
Mặc dù đây là công việc ít nhất để lưu mã bằng cách sử dụng HttpWebRequest/Response từ lựa chọn thiết kế xấu này trên phần .Net Framework, giải pháp chính xác là sử dụng HttpClient, không ném mã trạng thái 4xx và 5xx. Ngoại lệ là dành cho các tình huống đặc biệt, và chỉ ném để bắt nó và tiến hành như thể nó là tốt như thế này là xấu xí và xấu cho hiệu suất, đặc biệt là có một lựa chọn tốt hơn tránh nó hoàn toàn. https://msdn.microsoft.com/en-us/library/hh138242(v=vs.118).aspx –
điều này có vẻ không đúng; Tôi đang sử dụng HttpClient trong một dự án và khi gọi một url không tồn tại trả về mã trạng thái 404, ứng dụng khách sẽ ném một ngoại lệ thay vì trả về phản hồi với mã trạng thái 404. có thêm một bước trong việc sử dụng httpclient để ngăn chặn điều này không? – SelAromDotNet