HTTPRequest.Files.Count がゼロになることはありません
-
08-10-2019 - |
質問
HTML ページ上にフォームがあり、ユーザーが ASPX ページに投稿するファイルをアップロードするために使用する必要があります。背後のコードでは、ファイルが実際にロードされたかどうかをテストしたいと考えています。
if (Request.Files.Count > 0)
{
DoStuff(Request.Files[0]);
}
else
{
throw new Exception("A CSV file must be selected for upload.");
}
他のものには決して到達できません。これが ASP.NET の動作方法なのでしょうか?ファイルタイプの入力要素がある場合、ファイルが選択されていない場合でも、常に「ファイル」がアップロードされますか?
これを行う適切な方法は何ですか?もしかしてこれ?
if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
DoStuff(Request.Files[0]);
}
else
{
throw new Exception("A CSV file must be selected for upload.");
}
解決
たぶんこれはそうするでしょう:
if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0)
{
DoStuff(Request.Files[0]);
}
else
{
throw new Exception("A CSV file must be selected for upload.");
}
他のヒント
Request.Files.Count
常にnoが含まれています。の <input type="file">
フォームの要素、aに包まれています Key:Value
お店。
したがって、投稿されたフォームに含まれていない場合 <input type="file">
タグ、次に Request.Files.Count
戻ります 0
.
各 Key
それは name
の <input type="file" name="OneOfTheKeys">
値はタイプです HttpPostedFileWrapper
.
見る ここ 学ぶために HttpPostedFileWrapper
.
fileuploadコントロールを使用し、.hasfilesをチェックして、何かがアップロードされているかどうかを確認する必要があります。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.aspx
また、.count メソッドによって返されるデータが文字列ではないことも確認します。文字列値「0」は常に int 値 0 より大きくなります。この条件では常に true が返されます。
適切な型が比較されていることを確認するために、.count の戻り値を int として型キャストしてみます。文字列 '-1' であっても、int 0 よりも高いビット値を持ちます。
単なる考えですが、間違っている可能性があります...