私は以下のコードでクライアントにダウンロードをダウンロードするDropbox共有リンクを持っています。URLが存在しない場合にユーザーにメッセージを表示する404 WebClient DownloadFileを使用してファイルをダウンロードするとき
私の問題は、ファイルがDropboxリンクに存在するかどうかをどのように知るかです。私はテストのために2つのリンクを持っています。最初のものはもう共有されていない共有リンクなので、URLにプラグインすると404エラーが返されます。 2番目は有効なリンクで、クライアントPCに正常にダウンロードされます。このリンクはブラウザで直接試すことができます。
私は以下のコードを試しましたが、それでもまだOK状態と壊れたリンクの200状態を返します。
アプリケーションで404のリンクが壊れていることをユーザーに知らせるにはどうすればよいですか?ここで
//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 私はそれが働いて、悪いURLのチェックを取得するために何をしたかです。
string contentType = null;
if(contentType != "text/html; charset=utf-8")
{
using (WebClient client = new WebClient())
{
client.DownloadFile(URL, location);
}
}
else
{
//Throw error to user
}
コードをテストしたが、放火犯を見ずに、いくつかの違いがあります。 1つは、悪いリンクは 'text/html'のコンテンツタイプを持ち、有効なリンクはファイルタイプ(' application/pdf')と一致するコンテンツタイプを含んでいます。第2に、無効なリンクがHTMLを返すだけで、有効なリンクは実際のファイルの場所に302を行います。これらの相違点(応答コンテンツタイプを盗聴するか、実際には302の検出方法がわからない)を組み合わせて、有効なファイルを識別する方法を特定するのに役立ちますか? – Tommy
@トミーはそれをしました。アイデアをありがとう。私は自分のコードにContentType = "text/html"を追加して、ファイルをダウンロードしないでください。 – Apollo
驚くばかり! - 私はちょうどコメントのように、おそらく並べ替えの "ハック - ish"の答えとして残すつもりです:) – Tommy