ここでの私の質問へのフォローアップ: ASP.NET MVC 2 - 編集アクションでのファイルの処理; または、他の属性をスキップする「オプション」のデータ注釈を作成することは可能ですか?
検証属性が false としてトリガーされた場合 (たとえば、Required
フィールドが欠落している)、他の検証属性も呼び出されますか、それともスキップされたり短絡されたりしますか?
ファイルが実際に存在する場合にのみ適用したいカスタムファイル検証属性があるため、質問します。Required
Simon Ince の条件付き検証を使用して、エンティティを作成しているか編集しているかに基づいてフィールドを切り替えていますが、最初の結果に基づいて別の属性を実際に適用できるかどうかはわかりません。つまり、ファイルが存在しない場合、次のファイルバリデーターは例外をスローする可能性があります。
public class ValidateFileAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
var file = value as HttpPostedFileBase;
if (file == null)
{
return false;
}
string[] validExtensions = { "jpg", "jpeg", "gif", "png" };
string[] validMimeTypes = { "image/jpeg", "image/pjepeg", "image/gif", "image/png" };
string[] potentialFileExtensions = file.FileName.Split('.');
string lastExtension = potentialFileExtensions[(potentialFileExtensions.Length - 1)];
string mimeType = file.ContentType;
bool extensionFlag = false;
bool mimeFlag = false;
foreach (string extension in validExtensions)
{
if (extension == lastExtension)
{
extensionFlag = true;
}
}
foreach (string mt in validMimeTypes)
{
if (mt == mimeType)
{
mimeFlag = true;
}
}
if (extensionFlag && mimeFlag)
{
return true;
}
else
{
return false;
}
}
}
問題にアプローチする方法がわかりません。ファイルが存在する場合と存在しない場合がありますが、存在する場合は検証したいと思います。何か案は?