mak*_*mbi 15 validation asp.net-mvc attributes
我PersonDTO班上有财产:
[EmailAddress]
public string Email { get; set; }
Run Code Online (Sandbox Code Playgroud)
它工作正常,除非我想允许空字符串作为我的模型的值,如果我从客户端发送JSON:
{ Email: "" }
Run Code Online (Sandbox Code Playgroud)
我得到了400 bad request答复
{"$id":"1","Message":"The Email field is not a valid e-mail address."}
Run Code Online (Sandbox Code Playgroud)
但是,它允许省略email值:
{ FirstName: "First", LastName: 'Last' }
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
[DataType(DataType.EmailAddress, ErrorMessage = "Email address is not valid")]
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
据我所知,Data Annotations Extensionspack也不允许空字符串.
因此,我想知道是否有一种方法可以自定义标准EmailAddressAttribute以允许空字符串,因此我不必编写自定义验证属性.
Yis*_*zer 27
您有两种选择:
样品:
bool IsValid(object value)
{
if (value == string.Empty)
{
return true;
}
else
{
return _wrappedAttribute.IsValid(value);
}
}
Run Code Online (Sandbox Code Playgroud)
扩展选项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);
}
}
Run Code Online (Sandbox Code Playgroud)
并使用该属性:
[JsonConverter(typeof(EmptyToNullConverter))]
public string EmailAddress {get; set; }
Run Code Online (Sandbox Code Playgroud)
或者在WebApiConfig.cs中全局:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(
new EmptyToNullConverter());
Run Code Online (Sandbox Code Playgroud)
小智 12
这很简单。做这个。再见
private string _Email;
[EmailAddress(ErrorMessage = "Ingrese un formato de email válido")]
public string Email { get { return _Email; } set { _Email = string.IsNullOrWhiteSpace(value) ? null : value; } }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7949 次 |
| 最近记录: |