在我的WebAPI中,我有一个允许用户注册到我的页面的方法。
[AllowAnonymous]
[Route("create")]
[HttpPost]
public async Task<IHttpActionResult> CreateAccount(MyModel newAccount)
{
}
我的模型有DateTime字段,在请求时填充日期
当用户发送1990-02-07
时,一切正常,但对于07.02.1980
,我的模型中的值不正确 - 日期nad月份切换值。
我知道我可以创建here所示的自定义JsonConverter
,但我可以全局制作吗?
内部Startup.cs
我有:
config.MapHttpAttributeRoutes();
config.Formatters.Remove(config.Formatters.XmlFormatter);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
jsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd";
jsonFormatter.SerializerSettings.DateParseHandling = DateParseHandling.DateTime;
但我仍然可以使用无效的日期格式请求。
我想全局允许单一格式的日期和时间
我想允许yyyy-MM-dd
(1990-02-07)和yyyy-MM-dd hh:mm:ss
(2016-07-28 11:56:00)并在指定其他格式时返回badrequest或无效请求,甚至不处理数据
答案 0 :(得分:1)
您可以为日期创建自己的Json媒体格式化程序并将其注册为DateTime类型。以下是媒体格式化程序的示例代码
public class JsonDateFormatter : JsonMediaTypeFormatter
{
public override System.Threading.Tasks.Task<Object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger, CancellationToken cancellationToken)
{
//Do date formatting here
}
public override bool CanReadType(Type type)
{
if (type == typeof(DateTime))
return true;
return false;
}
}
以下是您在Startup.cs
config.Formatters.Add(new JsonDateFormatter());