使用WebApi v2我已經構建了一些將對象作爲參數的東西。我使用IValidateableObject和dataannotations進行模型驗證,我使用WebApi過濾器進行觸發。Validator.TryValidateObject不驗證屬性
但是,一個對象包含所有需要驗證的項目數組。我已經創建了一個自定義屬性,以便使用類似Asp.net Web Api nested model validation這樣的操作,但我無法驗證。另外 - 我已經使用了ValidateAllProperties標誌。
因此,我構建了一個控制檯應用程序來驗證行爲,驗證似乎沒有觸發(或者我錯誤地調用了API)。這裏是不適合我的東西:
namespace ConsoleApplication1 { using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations;
class Program
{
static void Main()
{
var s = new Boundary { LowerDecimal = 1.1m };
var isValid = Validator.TryValidateObject(s, new ValidationContext(s, null, null), new List<ValidationResult>(), true);
Console.WriteLine("Validation resulted in " + isValid);
Console.ReadLine();
}
}
public class Boundary
{
[Range(0,1)]
public decimal LowerDecimal { get; set; }
}
}
的isValid總是返回true。我在這裏做錯了什麼?
編輯 - 還試圖定義元數據類喜歡這裏:Validation does not work when I use Validator.TryValidateObject
你能告訴您的自定義'ValidationAttribute'代碼?以上將始終返回true,因爲'Validator.TryValidateObject'方法將僅檢查指定類型的每個屬性上的'RequiredAttribute',它不會識別其他驗證屬性 - 這就是爲什麼您需要使用自定義屬性。這在[docs](http://msdn.microsoft.com/en-us/library/dd411772(v = vs.110).aspx)的備註部分中進行了說明。 – James
Range屬性在框架內,http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.rangeattribute(v=vs.110).aspx,我也使用http: //msdn.microsoft.com/en-us/library/dd411772(v=vs.110).aspx,並在末尾顯示布爾值,指示'validateAllProperties,true驗證所有屬性;如果爲false,則僅驗證所需的屬性' –
我所指的代碼是您提到自己寫的自定義屬性。該文檔相當混亂,備註部分似乎與'validateAllProperties'所說的內容相矛盾。無論如何,我認爲你是正確的,這似乎不是正確的行爲,它應該驗證屬性上的RangeAttribute。 – James