【问题标题】:DateTime values binding in ASP.NET WebAPI (4.x Framework)ASP.NET WebAPI (4.x Framework) 中的 DateTime 值绑定
【发布时间】: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


【解决方案1】:

我不确定,但我希望这段代码对您有更多帮助。 您可以更改日期格式并在 quertString 中传递区分大小写的参数。

http://localhost:9000/api/search?Freetext=oi-veii&From=14-07-2020

【讨论】:

  • 谢谢,但问题不是“我如何让它工作”。区分大小写也与问题无关。
猜你喜欢
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多