Дата публикации в основном API Asp.net - PullRequest
0 голосов
/ 16 января 2019

Я использую основной веб-API asp.net 2.1. Я отправляю запрос с почтальоном. Я отправляю "10.12.2019". Но я получаю «12.10.2019» из моего controller.cs. Как я могу исправить эту ошибку?

MyController.cs

[HttpPost]
public void MyMethod([FromBody]MyClass myClass)
{
}

public class MyClass {
    public DateTime myDate { get; set; }
}

мой запрос

http://localhost:5012/api/MyController/MyMethod

мой JSON

{
  "myDate": "10.12.2019"
}

My startup.cs

  services.Configure<RequestLocalizationOptions>(options =>
       {
           options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("tr-TR");
           options.SupportedCultures = new List<CultureInfo> { new CultureInfo("tr-TR") };
       });

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Если вы хотите изменить культуру, используемую вашим сервисом, вы можете установить его в Startup.cs и добавить его в метод Configure().

Это работает для меня (добавьте его раньше app.UseMVC()):

var defaultCulture = new CultureInfo("tr-TR");
app.UseRequestLocalization(new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture(defaultCulture),
    SupportedCultures = new List<CultureInfo> { defaultCulture },
    SupportedUICultures = new List<CultureInfo> { defaultCulture }
});

При вызове .ToShortDateString() выше будет правильно отображаться дата в формате dd.MM.yyyy. Однако при размещении даты она не будет правильно привязываться / анализироваться.

Чтобы правильно проанализировать формат даты при выполнении POST, необходимо установить культуру сериализатора JSON. Мы можем установить культуру сериализатора JSON в AddJsonOptions().

Добавьте это к методу ConfigureServices, и это должно решить проблему.

services.AddMvc()
        .AddJsonOptions(options =>
        {
            options.SerializerSettings.Culture = new CultureInfo("tr-TR"); 
        });
0 голосов
/ 16 января 2019

Попробуйте этот атрибут JsonConvert для пользовательской даты

public class MyDateTimeConverter : IsoDateTimeConverter
{
    public MyDateTimeConverter()
    {
        base.DateTimeFormat = "dd-MM-yyyy";
    }
}

И используйте атрибут для вашей собственности как

public class MyClass
{
    [JsonConverter(typeof(MyDateTimeConverter))]
    public DateTime MyDate { get; set; }
}

это автоматически преобразует тело в ожидаемый формат.

если вы ожидаете все свойства даты и времени в этом формате, добавьте эти глобальные настройки в ваш startup.cs

services.AddMvc()  
   .AddJsonOptions(options =>  
   {  
     options.SerializerSettings.DateFormatString= "dd-MM-yyyy";  
   });  

Но вы должны убедиться, что все значения, указанные для этого свойства, должны быть в указанном формате. Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...