如何在F#

时间:2017-05-31 12:10:10

标签: asp.net validation f#

请让我知道在记录类型的属性分配时调用验证属性的合适方法。 我创建了一个自定义验证属性,如下所示。

namespace FloAppCore

module CatalogueAttributes =   
   open System
   open Newtonsoft.Json.Serialization
   open Newtonsoft.Json
   open System.Runtime.Serialization
   open System.ComponentModel.DataAnnotations
   open System.Text.RegularExpressions

[<AttributeUsage(AttributeTargets.Field, AllowMultiple = true, Inherited = false)>]
type IsNameValidAttribute() =
    inherit ValidationAttribute()
    override this.IsValid(value: obj) =
        let mutable result = true
        if(not(isNull(value)) && (value.ToString() <> "")) then
            result <- true

        let fnSpecialCharacter value =
            let pattern = Regex("[@#$%^&*()_+!~:;./?><]$")
            let matches = pattern.Match value
            not(matches.Success)

        if result then
            result <- (fnSpecialCharacter (value.ToString()))

        result

    override this.FormatErrorMessage(name:string) = 
        String.Format(this.ErrorMessageString,name)

我已将属性分配给这样的记录类型。

   type Item = {
    mutable Id:string
    [<IsNameValid(ErrorMessage = "{0} value is not valid.")>]
    Brand:string
    ProductName:string
    Description:string
    ItemSizeId:string
    ColourItemId:string
    SpecialCharacteristics:string
   }

与ASP.NET MVC不同,我使用Suave和asp.net核心,并使用Newtonsoft JsonConvert序列化/反序列化json对象。与ASP.NET MVC核心一样,如何在Suave中调用F#记录类型的模型绑定,以便调用验证属性并根据验证限制属性赋值。

0 个答案:

没有答案