将日期发布到Asp.net核心API

时间:2019-01-16 20:23:34

标签: c# asp.net-core-webapi

我正在使用asp.net核心Web API 2.1。我正在与邮递员发送请求。我正在发送“ 10.12.2019”。但是,我从controller.cs收到“ 12.10.2019”。如何解决此错误?

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"
}

我的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 :(得分:1)

如果您想更改服务使用的区域性,则可以在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格式正确显示日期。但是,发布日期时,它将无法正确绑定/解析。

要在发布时正确解析日期格式,您需要设置JSON序列化器的区域性。我们可以在AddJsonOptions()中设置JSON序列化器的区域性。

将此方法添加到ConfigureServices方法中,它应该可以解决问题。

services.AddMvc()
        .AddJsonOptions(options =>
        {
            options.SerializerSettings.Culture = new CultureInfo("tr-TR"); 
        });

答案 1 :(得分:0)

尝试使用此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";  
   });  

但是您必须确保为该属性提供的所有值都应采用所提供的格式。希望这会有所帮助:)