Ich entwickle eine C# -Konsolenanwendung, um zu testen, ob eine URL gültig ist oder funktioniert. Es funktioniert gut für die meisten URLs und kann mit HTTP-Statuscode von der Zielwebsite beantwortet werden. Wenn Sie jedoch einige andere URLs testen, löst die Anwendung beim Ausführen der HttpClient.SendAsync-Methode die Fehlermeldung "Beim Senden der Anforderung ist ein Fehler aufgetreten" aus. Daher kann ich keine Antwort oder HTTP-Statuscode erhalten, auch wenn diese URL tatsächlich im Browser funktioniert. Ich bin verzweifelt, um herauszufinden, wie ich mit diesem Fall umgehen soll. Wenn die URL nicht funktioniert oder der Server meine Anfrage ablehnt, sollte sie mir zumindest den entsprechenden HTTP-Statuscode geben.C# HttpClient.SendAsync throw Beim Ausprobieren einiger URLs ist ein Fehler beim Senden der Anfrage aufgetreten.
Hier sind die vereinfachte Code meiner Testanwendung:
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)
{
}
}
}
}
}
Im Allgemeinen gibt 'Task.WhenAll' ein erwartetes zurück, auf das gewartet werden muss. Wenn er die blockierende Version haben möchte, sollte er 'Task.WaitAll' verwenden. –
Sie schrieb dies nur, wenn ich mit der Bearbeitung fertig bin :) –
Dank @TamirVered und Yuval Itzchakov helfen Sie mir, die Details der Ausnahme herauszufinden und meinen Code zu verbessern. Jetzt stellt sich die Frage, wie kann ich wissen, ob diese URL funktioniert oder nicht, wenn dieses DNS-Level-Problem auftritt. Weil in vielen Fällen die URL tatsächlich funktioniert. Überprüfen Sie den getesteten URL-Teil, ich habe diesen Fall gerade hinzugefügt. – raycode