.Net WebApi 1个日期时间转换器

我在mvc 4.0中有一个webapi 1.0。

对于内容类型为x-www-form-urlencoded的webapi请求,有一种方法可以更改(全局)日期时间字段的默认转换器吗?

客户端发送到服务器的字段格式为dd / mm / yyyy但服务器似乎只转换此格式的日期mm / dd / yyyy

这是curl请求

curl "http://xxxx/yyy/apimethod/" -H "Accept-Encoding: gzip, deflate" -H "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" --data "ExpiryDate=30%2F04%2F2015&UserId=32" 

这是方法

 [HttpPost] public HttpResponseMessage apimethod(MyModel model) {} 

这就是模型

 public class MyModel{ public int UserId { get; set; } [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime ExpiryDate { get; set; } } 

在ASP.NET Web API中,您可以通过JsonFormatter的SerializerSettings添加不同的Json.NET DateTimeConverters,以使您的Serializer使用不同的DateTime格式。

 public class MyDateTimeConvertor : DateTimeConverterBase { public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { return DateTime.ParseExact(reader.Value.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteValue( ((DateTime)value).ToString("dd/MM/yyyy") ); } } 

然后将此转换器添加到序列化设置:

 config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new MyDateTimeConvertor());