C# 使用IValidatableObject验证mvc 3中上载的图像

C# 使用IValidatableObject验证mvc 3中上载的图像,c#,asp.net-mvc,C#,Asp.net Mvc,我在asp.net MVC 3中使用新的IValidatabeObject接口验证上载的图像时遇到一些问题 我需要做两件事: 确保上传的字节确实是图像 确保此图像的宽度为200px 我想我可以在验证块中使用try/catch来完成这一点: public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { try {

我在asp.net MVC 3中使用新的IValidatabeObject接口验证上载的图像时遇到一些问题

我需要做两件事:

  • 确保上传的字节确实是图像
  • 确保此图像的宽度为200px
我想我可以在验证块中使用try/catch来完成这一点:

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        try
        {
            System.Drawing.Image img = System.Drawing.Image.FromStream(this.ImageFile.InputStream);
            if (img.Width != 200)
                yield return new ValidationResult("This picture isn't the right size!!!!");
        }
        catch (Exception ex)
        {
            yield return new ValidationResult("This isn't a real image!") ;
        }
    }
这会产生新的错误:“无法从迭代器返回值。请使用yield return语句…”


我喜欢将验证逻辑作为模型的一部分,因此我不想放弃IValidatableObject方法,但我看不到一种方法可以让它工作。

将结果移到try-catch块之外

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{
  ValidationResult result = null;
  try
    {
        var img = System.Drawing.Image.FromStream(this.ImageFile.InputStream);
        if (img.Width != 200) 
            result = new ValidationResult("This picture isn't the right size!!!!");
    }
    catch (Exception ex)
    {
        result = new ValidationResult("This isn't a real image!") ;
    }

  if (result != null) 
    yield return result;
}
公共IEnumerable验证(ValidationContext ValidationContext) { ValidationResult=null; 尝试 { var img=System.Drawing.Image.FromStream(this.ImageFile.InputStream); 如果(img.宽度!=200) 结果=新的ValidationResult(“此图片大小不正确!!!!”); } 捕获(例外情况除外) { 结果=新的ValidationResult(“这不是真实的图像!”); } 如果(结果!=null) 收益结果; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) 
{
  ValidationResult result = null;
  try
    {
        var img = System.Drawing.Image.FromStream(this.ImageFile.InputStream);
        if (img.Width != 200) 
            result = new ValidationResult("This picture isn't the right size!!!!");
    }
    catch (Exception ex)
    {
        result = new ValidationResult("This isn't a real image!") ;
    }

  if (result != null) 
    yield return result;
}