Asp.net-Mvc
允許 EmailAddressAttribute 為空字元串
我在
PersonDTO班上有財產:[EmailAddress] public string Email { get; set; }它工作正常,除了我想允許空字元串作為我的模型的值,如果我從客戶端發送 JSON:
{ Email: "" }我得到了
400 bad request回應{"$id":"1","Message":"The Email field is not a valid e-mail address."}但是,它允許省略
{ FirstName: "First", LastName: 'Last' }我也試過:
[DataType(DataType.EmailAddress, ErrorMessage = "Email address is not valid")]但它不起作用。
據我了解,
Data Annotations Extensionspack 也不允許空字元串。因此,我想知道是否有一種方法可以自定義標準
EmailAddressAttribute以允許空字元串,這樣我就不必編寫自定義驗證屬性。
你有兩個選擇:
- 在電子郵件欄位中將 string.Empty 轉換為 null。很多時候這是完全可以接受的。您可以在全域範圍內完成這項工作,或者只需讓您的 setter 在電子郵件欄位上將 string.Empty 轉換為 null。
- 編寫自定義 EmailAddress 屬性,因為 EmailAddressAttribute 是密封的,您可以將其包裝並編寫自己的轉發 IsValid 方法。
樣本:
bool IsValid(object value) { if (value == string.Empty) { return true; } else { return _wrappedAttribute.IsValid(value); } }選項 1 的擴展(從Web Api 未將 json 空字元串值轉換為 null)
添加此轉換器:
public class EmptyToNullConverter : JsonConverter { private JsonSerializer _stringSerializer = new JsonSerializer(); public override bool CanConvert(Type objectType) { return objectType == typeof(string); } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { string value = _stringSerializer.Deserialize<string>(reader); if (string.IsNullOrEmpty(value)) { value = null; } return value; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { _stringSerializer.Serialize(writer, value); } }並在財產上使用:
[JsonConverter(typeof(EmptyToNullConverter))] public string EmailAddress {get; set; }或在 WebApiConfig.cs 中全域:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add( new EmptyToNullConverter());