C# 发布日期到Asp.net核心API

C# 发布日期到Asp.net核心API,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,我正在使用asp.net核心web API 2.1。我正在和邮递员一起发送请求。我发送“2019年12月10日”。但是,我从controller.cs获得“2019年10月12日”。如何修复此错误 MyController.cs [HttpPost] public void MyMethod([FromBody]MyClass myClass) { } public class MyClass { public DateTime myDate { get; set; } } se

我正在使用asp.net核心web API 2.1。我正在和邮递员一起发送请求。我发送“2019年12月10日”。但是,我从controller.cs获得“2019年10月12日”。如何修复此错误

MyController.cs

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

public class MyClass {
    public DateTime myDate { get; set; }
}
  services.Configure<RequestLocalizationOptions>(options =>
       {
           options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("tr-TR");
           options.SupportedCultures = new List<CultureInfo> { new CultureInfo("tr-TR") };
       });
我的请求

http://localhost:5012/api/MyController/MyMethod
我的json

{
  "myDate": "10.12.2019"
}
My startup.cs

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

public class MyClass {
    public DateTime myDate { get; set; }
}
  services.Configure<RequestLocalizationOptions>(options =>
       {
           options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("tr-TR");
           options.SupportedCultures = new List<CultureInfo> { new CultureInfo("tr-TR") };
       });
services.Configure(选项=>
{
options.DefaultRequestCulture=new Microsoft.AspNetCore.Localization.RequestCulture(“tr”);
options.SupportedCultures=新列表{new CultureInfo(“tr”)};
});

尝试使用此JsonConvert属性作为自定义日期

public class MyDateTimeConverter : IsoDateTimeConverter
{
    public MyDateTimeConverter()
    {
        base.DateTimeFormat = "dd-MM-yyyy";
    }
}
并将属性用作

public class MyClass
{
    [JsonConverter(typeof(MyDateTimeConverter))]
    public DateTime MyDate { get; set; }
}
这将自动将正文转换为预期格式

如果希望所有datetime属性都是此格式,请将此全局设置添加到
startup.cs

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

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

尝试使用此JsonConvert属性来设置自定义日期

public class MyDateTimeConverter : IsoDateTimeConverter
{
    public MyDateTimeConverter()
    {
        base.DateTimeFormat = "dd-MM-yyyy";
    }
}
并将属性用作

public class MyClass
{
    [JsonConverter(typeof(MyDateTimeConverter))]
    public DateTime MyDate { get; set; }
}
这将自动将正文转换为预期格式

如果希望所有datetime属性都是此格式,请将此全局设置添加到
startup.cs

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

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

如果要更改服务使用的区域性,可以在
Startup.cs
中进行设置,并将其添加到
Configure()
方法中

这对我很有用(在app.UseMVC()之前添加它):


如果要更改服务使用的区域性,可以在
Startup.cs
中进行设置,并将其添加到
Configure()
方法中

这对我很有用(在app.UseMVC()之前添加它):



尝试以yyyy-MM-dd格式发送。后文化不可知日期值我希望从c#@Farshan处解决。我不想更改我发送的JSON对象。我不理解@VidmantasBlazevicius。您能解释一下吗?@HasanOzdemir您需要发送一个有效的日期格式,或者读取为字符串并解析您自己发送的yyyy-MM-dd格式。后文化不可知日期值我希望从c#@Farshan处解决。我不想更改我发送的JSON对象。我不理解@VidmantasBlazevicius。您能解释一下吗?@HasanOzdemir您需要发送一个有效的日期格式或读取为字符串并解析您自己谢谢。我能改变我的本地化版本吗?@Farshan?@HasanOzdemir我想这会奏效的。如果您使用
app.UseRequestLocalization(“tr”)在启动时的配置方法中使用支持的区域性。再次感谢@Farshan。当我使用
.toSortDateString()
进行测试时,它是'dd.MM.yyyy'格式。工作得很好。但是,当我通过邮递员发送POST请求时,它是'MM.dd.yyyy'
options.SerializerSettings.Culture=new-CultureInfo(“tr-tr”)修复了我从Haldo答案中得到的问题。谢谢你的帮助@Farshan。谢谢。我能改变我的本地化版本吗?@Farshan?@HasanOzdemir我想这会奏效的。如果您使用
app.UseRequestLocalization(“tr”)在启动时的配置方法中使用支持的区域性。再次感谢@Farshan。当我使用
.toSortDateString()
进行测试时,它是'dd.MM.yyyy'格式。工作得很好。但是,当我通过邮递员发送POST请求时,它是'MM.dd.yyyy'
options.SerializerSettings.Culture=new-CultureInfo(“tr-tr”)修复了我从Haldo答案中得到的问题。谢谢你的帮助@Farshan。非常感谢@Haldo。你说的我都做了。当我使用
.toSortDateString()
进行测试时,它是'dd.MM.yyyy'格式。工作得很好。但是,当我通过邮递员发送POST请求时,它又是'MM.dd.yyyy'@haldo您是否添加了
app.UseRequestLocalization()
.AddJsonOptions()
以及
dd.MM.yyyy
格式?这对我很有用。不确定还有什么建议。请确保
AddJsonOptions()
中的日期格式正好是
dd.MM.yyyy
。如果是
dd-MM-yyyy
@HasanOzdemir,如果您可以以
yyyy.MM.dd
(或ISO8601)格式发送日期,该格式将是最不含糊的格式,并且可能会解决问题,则会失败。@HasanOzdemir我已经更新了我的答案。尝试添加
options.SerializerSettings.Culture=newcultureinfo(“TR-TR”)
to
AddJsonOptions
非常感谢@Haldo。你说的我都做了。当我使用
.toSortDateString()
进行测试时,它是'dd.MM.yyyy'格式。工作得很好。但是,当我通过邮递员发送POST请求时,它又是'MM.dd.yyyy'@haldo您是否添加了
app.UseRequestLocalization()
.AddJsonOptions()
以及
dd.MM.yyyy
格式?这对我很有用。不确定还有什么建议。请确保
AddJsonOptions()
中的日期格式正好是
dd.MM.yyyy
。如果是
dd-MM-yyyy
@HasanOzdemir,如果您可以以
yyyy.MM.dd
(或ISO8601)格式发送日期,该格式将是最不含糊的格式,并且可能会解决问题,则会失败。@HasanOzdemir我已经更新了我的答案。尝试添加
options.SerializerSettings.Culture=newcultureinfo(“TR-TR”)
添加JSONOPTIONS