2014-11-09 4 views
0

jquery $.ajax() отправляет даты от браузера как json в формате ISO: yy-mm-dd (или я могу использовать yyyy-mm-dd, если это лучше) в корпусе POST.Как принять формат даты ISO в ASP.NET Web API

Контроллер веб-интерфейса ASP.NET MVC4 содержит DateTime свойство для этого.

Как получить значение даты в настройках культуры любого сервера?

Я попытался

public class TestController : ApiController { 

    public class PlaaniSisend 
    { 
     public DateTime date { get; set; } 
    } 


    [HttpPost] 
    public HttpResponseMessage Post([FromBody] PlaaniSisend vali) 
    { 
     Console.Write(vali.date); 
    } 
    } 

Если сервер нить формат даты культура отличается от ISO, значение vali.date неправильно. Как исправить это, чтобы формат даты ISO использовался для анализа в любых настройках культуры сервера?

ответ

-1

Вы можете принять данные в виде строки, и разобрать его с определенным форматом и культуры:

public class TestController : ApiController { 

    public class PlaaniSisend 
    { 
    public string date { get; set; } 
    } 

    [HttpPost] 
    public HttpResponseMessage Post([FromBody] PlaaniSisend vali) 
    { 
    DateTime date = DateTime.ParseExact(vali.date, "yyyy-MM-dd", CultureInfo.InvariantCulture); 
    Console.Write(date); 
    } 

} 
+0

Возможно, много свойства даты в разных вложенных объектах, массивах и списках в размещенном json. Answer reqires, чтобы изменить все свойства DateTime на строку и написать ручной код для их анализа. Может быть, есть какая-то настройка в парсере WebAPI json или в другом месте, которое позволяет анализировать даты iso? Я могу изменить столбцы столбцов, размещенные в браузере, в какой-то другой инвариантный формат, если это помогает. – Andrus

+0

Существует ISODateTimeConverter в Newtosoft.JSON, используемый в WebAPI. Может быть, можно использовать его для автоматического преобразования? – Andrus

0

Это работает для меня: я определил параметры глобализации в web.config:

<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/> 

и затем, в Global.asax.cs> Application_Start, я установил JsonFormatter для использования текущей культуры:

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture; 
Смежные вопросы