Ich habe Dropbox shared Links, die mit dem Code unten auf den Client heruntergeladen werden.Anzeige der Nachricht an den Benutzer, wenn die URL nicht existiert 404 beim Herunterladen der Datei mit dem WebClient DownloadFile
Mein Problem ist, wie weiß ich, ob die Datei auf dem Dropbox-Link existiert. Unten habe ich zwei Links zum Testen. Der erste ist ein geteilter Link, der nicht mehr geteilt wird. Wenn Sie ihn also an die URL anschließen, wird ein 404-Fehler zurückgegeben. Der zweite ist ein gültiger Link und es wird auf den Client-PC heruntergeladen. Sie können diese Links direkt im Browser ausprobieren.
Ich habe versucht den Code unten, aber es gibt immer noch einen OK-Status und einen 200-Status für die defekte Verbindung.
Wie kann ich den Benutzer wissen lassen, dass die Verbindung 404 in der Anwendung unterbrochen ist?
//Throws 404 error in browser. Linked was previously shared but now does not exits.
string URL = "https://www.dropbox.com/s/t0wnpjojvj6g4dx/Dropbox.pdf?raw=1";
//Valid URL;
string URL = "https://www.dropbox.com/s/javzmitc7ae4l6r/Dropbox.pdf?raw=1";
HttpWebResponse response = null;
var request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "HEAD"; //Also tried "GET"
try
{
response = (HttpWebResponse)request.GetResponse();
// get the status code
HttpStatusCode status = response.StatusCode; //Always returns OK.
using (WebClient client = new WebClient())
{
client.DownloadFile(URL, location);
}
}
catch (WebException ex)
{
/* A WebException will be thrown if the status of the response is not `200 OK` */
}
finally
{
// Don't forget to close your response.
if (response != null)
{
response.Close();
}
}
UPDATE Hier ist, was ich daran zu arbeiten und die Überprüfung für eine schlechte URL bekommen haben.
string contentType = null;
if(contentType != "text/html; charset=utf-8")
{
using (WebClient client = new WebClient())
{
client.DownloadFile(URL, location);
}
}
else
{
//Throw error to user
}
Ohne den Code zu testen, aber bei firebug suchen, gibt es einige Unterschiede. Einer, der schlechte Link hat einen Inhaltstyp von "text/html", während der gültige Link einen Inhaltstyp enthält, der dem Dateityp ("application/pdf") entspricht. Zweitens führt der gültige Link 302 zum tatsächlichen Dateispeicherort, während der ungültige Link nur HTML zurückgibt. Ist eine Kombination dieser Unterschiede (schnüffeln Sie den Inhaltstyp der Antwort oder ich weiß nicht, wie Sie 302 erkennen können) hilfreich, um eine Methode zur Identifizierung einer gültigen Datei zu finden? – Tommy
@Tommy das hat es getan. Danke für die Idee. Ich habe zu meinem Code hinzugefügt, wenn der ContentType = "text/html", dann fahren Sie nicht mit Download der Datei fort. – Apollo
Super! - Ich werde dies als nur einen Kommentar verlassen, da es wahrscheinlich eine Art "hack-ish" Antwort ist :) – Tommy