Неправильный формат даты с использованием moment и запроса web api с использованием .net core

#javascript #c# #api #date

#javascript #c# #API #Дата

Вопрос:

Я хочу использовать moment для обработки дат, но когда я отправляю запрос на URL-адрес web api, дата поступает в другом формате.

Например, из JS я отправляю ‘2021-01-02′, но когда запрос поступает на серверную часть, дата преобразуется в ’02-01-2021’, и мне нужно обработать формат ГГГГ-ММ-ДД для серверной части

пример запроса:

 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 -> Метод Configure

     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
            }
        });

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

Комментарии:

1. Для меня ваш код работал хорошо.

Ответ №1:

Лучшее, что можно сделать, это изменить

 'YYYY-MM-DD'
 

Для

 'YYYY-MMM-DD'
 

Таким образом, это позволяет избежать двусмысленности, и c # DateTime может легко ее проанализировать.

т.е.. 05-06-20 может быть 6 мая 2020 года или 5 июня 2020 года. Проще использовать письма за месяц

Комментарии:

1. Этот «ответ» кажется неуместным для вопроса.

2. @RobG Обычно причина, по которой люди беспокоятся о порядке частей даты, заключается в различии между американским и европейским форматами даты, что может привести к ошибкам синтаксического анализа. Это устраняется, если месяц указан буквами. После этого C # может напечатать правильную дату в любой форме, которая вам нравится.

3. @RobG Также возможно, что я неправильно истолковал вопрос.

4. У меня не сработало, запрос выдал 400 (неверный запрос) в формате ‘ГГГГ-МММ-ДД’

5. @AlonsoContreras измените порядок и убедитесь, что прописные буквы указаны правильно. вероятно, ‘дд МММ гггг’