2016-02-01 43 views
0

我在C#中使用數據註釋來驗證POCO類。我希望能夠在不同情況下指定不同的驗證方案。例如。對受信任的數據源進行最低限度的驗證,但對通過向公衆公開的網站表單收集的數據進行更高級別的驗證。具有屬性的多個驗證方案

我已經谷歌搜索,我不知道是否:A)我沒有使用正確的條款,或B)這是完全錯誤的方法,這就是爲什麼我沒有找到任何東西。看起來這可能是一種常見的需求。

爲了說明我想做什麼:

public class TestClass { 

    [Required] 
    [EmailAddress] 
    [WhitelistCharactersOnly(ValidationScheme = ValidationSchemes.Untrusted)] 
    public string EmailAddress { get; set; } 

} 

我知道我可以做自定義屬性的東西,但我想避免重新發明輪子,如果可能的。

爲了不引起太多爭論,我的問題是這樣的:有沒有一種方法可以實現我想要做的事情,那就是目前C#框架的一部分?

+0

我認爲你正在尋找的屬性.. https://msdn.microsoft.com/en-us/library/84c42s56(v=vs.110).aspx – Pogrindis

+0

對不起,我已經使用了當我應該說出「屬性」時,在我的問題中使用單詞「註釋」。謝謝,我知道屬性。 我已更新問題。 –

回答

0

如果您使用MVC框架進行驗證,您可以利用MetadataTypeAttribute

[MetadataType(typeof(ICustomerValidation1))] 
public class CustomerValidation1 : CustomerBase { } 

public class CustomerBase 
{ 
    public string Title { get; set; } 
} 


public interface ICustomerValidation1 
{ 
    // Apply RequiredAttribute 
    [Required(ErrorMessage = "Title is required.")] 
    string Title { get; } 
} 
+0

非常感謝你,這看起來也很好地分離出邏輯。我會玩這個,如果它有效,並且沒有其他建議被提出,我會明天接受你的答案。 –

+0

如果沒有,請告訴我。 –

+0

謝謝,這工作得很好(無論如何,可悲的是我沒有使用MVC,所以驗證忽略了相關接口默認情況下)。 爲了其他人的利益:我通過在我的實體的基類中實現IValidatableObject來解決非MVC問題,這使我可以重寫Validate方法並根據MetadataType屬性指定的關聯接口中定義的屬性屬性手動驗證。也許有更好的方法,但這對我有效。 –