WebAPI只允许单一日期格式

本文关键字:日期 格式 许单一 WebAPI | 更新日期: 2023-09-27 17:59:12

在我的WebAPI中,我有一个允许用户注册到我的页面的方法。

[AllowAnonymous]
[Route("create")]
[HttpPost]
public async Task<IHttpActionResult> CreateAccount(MyModel newAccount)
{
}

我的模型有一个DateTime字段,其中填充了提出请求的日期
当用户发送例如1990-02-07时,一切都很好,但对于07.02.1980,我在模型日期和月份切换值中得到了不正确的值
我知道我可以创建自定义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或无效请求,甚至不处理数据。

WebAPI只允许单一日期格式

您可以为日期创建自己的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());