【发布时间】:2020-11-04 16:03:51
【问题描述】:
当 WebAPI 的绑定框架运行时,我似乎无法理解是什么控制了 DateTime 值的解析方式。一些测试代码:
public class TestSearchModel
{
public DateTime? From { get; set; }
public DateTime? Until { get; set; }
public string Freetext { get; set; }
}
...
public HttpResponseMessage Get([FromUri] TestSearchModel searchModel)
{
//CultureInfo culture = Thread.CurrentThread.CurrentCulture;
return Request.CreateResponse(
$"Received search request with Freetext: {searchModel.Freetext}, From: {searchModel.From}, Until: {searchModel.Until}");
}
然后我用各种请求进行测试,例如:
http://localhost:9000/api/search?freetext=oi-vei!&from=14.07.2020 (1)
http://localhost:9000/api/search?freetext=oi-vei!&from=07.14.2020 (2)
http://localhost:9000/api/search?freetext=oi-vei!&from=2020-07-14 (3)
Freetext 仅作为测试存在 - 它总是绑定得很好。格式(3)中的日期绑定很好,我想这与文化不变格式足够接近。 我不明白是为什么当应用程序的文化设置为具有这种日期格式(在我的例子中是挪威语)时格式 (1) 不起作用的原因。
我们的目的是让 API 的使用者在任何情况下都使用文化不变的格式,但我们也认为能够识别国家格式会很好 - 当我们无论如何从请求的标头中设置当前文化时。我意识到我可以连接我自己的活页夹并编写任何我想要的程序,但这似乎是框架应该已经具备的东西。它确实以一种或另一种方式解析日期时间值。所以问题是:绑定系统在尝试解析日期值时如何决定使用什么日期格式?
【问题讨论】:
-
一些附加细节:Web 应用程序托管在控制台应用程序中,位于 Owin http 服务中。配置非常接近默认值,我只是添加了几个消息处理程序(用于从请求设置文化和用于调试目的)。在将请求传递给基本方法之前,不要对请求做任何事情。
标签: asp.net .net asp.net-web-api