首页 > 解决方案 > 使用时刻和使用 .net 核心的 Web api 请求的日期格式不正确

问题描述

我想使用时刻来处理日期,但是当我向 web api url 发送请求时,日期以另一种格式到达。

例如,我从 JS 发送“2021-01-02”,但是当请求到达后端时,日期转换为“02-01-2021”,我需要为后端处理 YYY-MM-DD 格式

示例请求:

get(): Observable<any>{  
  let strDate = '2021-01-02';

  const payoad = {
     ... //other properties,
     datesearch: moment(strDate).format('YYYY-MM-DD') // --> 2021-01-02
  }

  return this.http.post<any>('https://localhost:33421/api/orders', payload)  
}

我的 c# 类请求:

public class RequestDto
{
    public string Category { get; set; }
    public string Product { get; set; }
    public DateTime Datesearch { get; set; }
}

我的网络 api 控制器:

    [HttpPost]
    public async Task<IActionResult> Search(RequestDto request)
    {
        var datecheck = request.Datesearch; // -> this get '02-01-2021'
        ....
        ....
        return Ok(response);
    }

我可能做错了什么?

更新:

解决如下:当我使用net core时,我必须在我的 SatrtUp.cs 类中设置文化信息 -> 配置方法

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
    {
        CultureInfo customCulture = new CultureInfo("en-US", true);
        customCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";
      

        app.UseRequestLocalization(new RequestLocalizationOptions
        { 
            DefaultRequestCulture = new RequestCulture(customCulture),
            SupportedCultures = new List<CultureInfo>
            { 
                customCulture
            },
            SupportedUICultures = new List<CultureInfo>
            { 
                customCulture
            }
        });

         ......
         ......
     }

标签: javascriptc#apidate

解决方案


最好的办法就是改变

'YYYY-MM-DD'

'YYYY-MMM-DD'

这样可以避免歧义,并且 c# DateTime 可以轻松解析它。

IE。05-06-20 可能是 2020 年 5 月 6 日或 2020 年 6 月 5 日


推荐阅读