Validation ASP.NET MVC 2/3验证属性-如果其中一个触发为false,其他是否短路?
我的问题的后续行动如下: 如果验证属性触发为false(例如,缺少Validation ASP.NET MVC 2/3验证属性-如果其中一个触发为false,其他是否短路?,validation,c#-4.0,asp.net-mvc-2,data-annotations,file-handling,Validation,C# 4.0,Asp.net Mvc 2,Data Annotations,File Handling,我的问题的后续行动如下: 如果验证属性触发为false(例如,缺少必需的字段),是否还会调用其他验证属性,或者跳过/短路其他验证属性 我之所以这样做是因为我有一个自定义的文件验证属性,我只想在文件实际存在时应用它。我正在使用Simon Ince的条件验证,根据我是否正在创建或编辑实体来切换Required字段,但我不确定是否可以根据第一个属性的结果实际应用另一个属性。我的意思是,如果文件不存在,以下文件验证程序可能会抛出异常: public class ValidateFileAttribute
必需的
字段),是否还会调用其他验证属性,或者跳过/短路其他验证属性
我之所以这样做是因为我有一个自定义的文件验证属性,我只想在文件实际存在时应用它。我正在使用Simon Ince的条件验证,根据我是否正在创建或编辑实体来切换Required
字段,但我不确定是否可以根据第一个属性的结果实际应用另一个属性。我的意思是,如果文件不存在,以下文件验证程序可能会抛出异常:
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;
}
}
}
我不知道如何处理这个问题。文件可能在那里,也可能不在那里,但如果它们在那里,我想验证它们。有什么想法吗?除非您打算重新使用自定义属性,否则尝试在自定义属性中放置逻辑可能会使事情变得复杂。您可以在控制器操作中运行逻辑(或在它调用的单独库中运行逻辑吗?),这样您就不必尝试链接属性。除非您要从自定义属性中重新使用,否则尝试将逻辑放置在自定义属性中可能会使事情变得复杂。您可以在控制器操作中(或在它调用的单独库中)运行逻辑吗?这样您就不必尝试链接属性