我正在使用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") };
});
答案 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";
});
但是您必须确保为该属性提供的所有值都应采用所提供的格式。希望这会有所帮助:)