【问题标题】:Controller changing date from dd/MM/yyyy to MM/dd/yyyy控制器将日期从 dd/MM/yyyy 更改为 MM/dd/yyyy
【发布时间】:2021-06-13 01:54:17
【问题描述】:

我正在使用 .NET Core 3.1 的 API,其工作原理如下:

[HttpPost]
public IActionResult Post([FromBody]ClassA classA)...

[HttpGet]
public IActionResult Get([FromQuery]ClassB classB)...

public ClassA {
     [JsonProperty("date1")]
     public DateTime date {get;set;}
}

public ClassB{
     [JsonProperty("date2")]
     public DateTime date {get;set;}
}

当我发送 GET 请求时,我能够获得所需的格式 (dd/MM/yyyy),因为我有一个自定义 ModelBinder 可以解决问题。

我认为它也适用于 POST 请求,但事实并非如此。当我以 (dd/MM/yyyy) 格式发送日期时,它会在控制器中显示为 (MM/dd/yyyy)。

我在某处读到 ModelBinder 仅适用于 x-www-form-urlencoded,但对于我的 POST 方法,我发送的是 JSON。

我尝试更改DefaultThreadCurrentCultureDefaultThreadCurrentUICulture,但没有成功。

我也尝试过使用自定义 JsonConverter,但是我必须将 JsonConverter 添加到我拥有的每个日期。

我正在寻找更复杂的解决方案。

【问题讨论】:

  • 像个大人一样 - ISO 8601 取胜 - xkcd.com/1179.
  • @AlexeiLevenkov 我将数据发送到第三方 API,他们要求日期为 dd/MM/yyyy

标签: c# api datetime .net-core


【解决方案1】:

尝试以下:

    public class ClassA
    {
        private DateTime _date
        [JsonProperty("date1")]
        public string date {
            get{ return _date.ToString("MM/dd/yyyy");}
            set{ _date = DateTime.ParseExact(value, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture);}
        }
    }

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多